shift + F6
鼠标选中原变量名,批量替换变量名Alt +insert
打开Generate,快速生成构造器和Getter,Setter。或者Code ->Generate 选择Alt + 回车 Enter
选中在使用的类名,对已经写了用的类,自动导包
fori 后 回车enter
快速生成循环参数i
array.fori
快速生成循环遍历数组arraylist.fori
快速生成遍历ArrayList的for循环(ArrayList list)自动生成接收返回值的变量
: 选择调用有返回值的方法,alt + enter
选local那一项,定义变量名后enter确定HEX 16进制 DEC 10进制 OCT 进制 BIN 2进制
10进制转2进制:
辗转相除法,10进制数每次除2,记录余数,直到10进制数除到0,余数反制即为对应2进制数
2进制转10进制:
从最低位即2进制最右开始,每一位对应的10进制值分别为 2^0
, 2^1
, 2^2
……依次类推。每位的1或0乘以该位10进制值,全部加起来得到总体10进制值。
位(bit):一个数字0或一个1,代表一位
字节(Byte):每逢8位是一个字节,这是数据存储的最小单位。
1 Byte = 8bit
比方说,办了一个带宽100Mbps
的宽带,下载东西时速度应该为100/8 ≈ 12.5 MB/s
。因为单位一个是Byte,一个是bit
1KB = 1024Byte = 2^10 Byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
1ZB = 1024EB
MS-DOS(Microsoft Disk Operating System) 非图形操作系统
正斜杠/ 反斜杠
Win+R 输入cmd打开,>前为当前所在文件夹位置
1、切换盘符 盘符名:
大小写都可 D:
c:
2、进入文件夹 cd 文件夹名
多级进入cd ……\……\
3、Tab补全字符or多个备选项则切换,例如要进入哪个文件夹时,cd li 按下Tab
4、cd..
返回上级文件夹
5、cd \
直接返回D盘根路径
6、dir 打印当前目录内容,文件夹为<DIR>
,文件显示大小
7、cls 清屏
8、exit 退出
参考 Java基础——java代码规范详细版————————————————
版权声明:本文为CSDN博主「ddm01」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34869143/article/details/94554253(https://blog.csdn.net/qq_34869143/article/details/94554253)
后缀名 | 意义 | 举例 |
---|---|---|
Impl | 这个类是一个实现类,而不是接口 | PaymentOrderServiceImpl |
Inter | 这个类是一个接口 | LifeCycleInter |
Dao | 这个类封装了数据访问方法 | PaymentOrderDao |
Listener | 响应某种事件的类 | PaymentSuccessListener |
Wrapper | 这是一个包装类,为了给某个类提供没有的能力 | SelectableOrderListWrapper |
Bean | 这是一个POJO | MenuStateBean |
前缀名 | 意义 | 举例 |
---|---|---|
create | 创建 | createOrder() |
delete | 删除 | deleteOrder() |
add | 创建,暗示新创建的对象属于某个集合 | addPaidOrder() |
remove | 删除 | removeOrder() |
init或则initialize | 初始化,暗示会做些诸如获取资源等特殊动作 | initializeObjectPool |
destroy | 销毁,暗示会做些诸如释放资源的特殊动作 | destroyObjectPool |
open | 打开 | openConnection() |
close | 关闭 | closeConnection() |
read | 读取 | readUserName() |
write | 写入 | writeUserName() |
get | 获得 | getName() |
set | 设置 | setName() |
copy | 复制 | copyCustomerList() |
modity | 修改 | modifyActualTotalAmount() |
calculate | 数值计算 | calculateCommission() |
do | 执行某个过程或流程 | doOrderCancelJob() |
start | 开始 | startOrderProcessing() |
stop | 结束 | stopOrderProcessing() |
send | 发送某个消息或事件 | sendOrderPaidMessage() |
receive | 接受消息或时间 | receiveOrderPaidMessgae() |
find | 查找对象 | findNewSupplier() |
public enum Events {
ORDER_PAID,
ORDER_CREATED
}
b - d = e;
return a == b ? 1 : 0;
call(a, b, c);
不能如下:
call(a,b,c);
System.out.println("ABC");
System.out.println("");//字符串可以为空
System.out.println("0");
System.out.println(-500);
System.out.println(30);
System.out.println(3.14);
System.out.println(-2.5);
//× 错误写法 System.out.ptintln('');
//× 错误写法 System.out.ptintln(‘AS’);
System.out.println('s');
System.out.println(true);
System.out.println(num3);//%
System.out.println(num3 + 0);//37
因为char/byte/short类型计算时会提升为int
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
字节型 | byte | 1个字节 | -128~127即 -2^7 ~ 2^7 -1 |
短整型 | short | 2个字节 | -32768~32767即 -2^15 ~ 2^15-1 |
整型 | int(默认) | 4个字节 | -2^31 ~ 2^31 |
长整型 | long(赋值数后带L或l) | 8个字节 | -2^63 ~ 2^ 63 - 1 |
单精度浮点数 | float(赋值数后带F或f) | 4个字节 | 1.4013E - 45 ~ 3.4028 E - 38 |
双精度浮点数 | double(默认) | 8个字节 | 4.9E-324 ~ 1.7977E + 308 |
字符型 | char | 2个字节 | ASCII码 0~65535 |
根据数据所占字节,计算取值范围。一个字节Byte是8个bit,首位做正负符号标识,byte的取值范围为什么是-2^7~2^7-1
?
主要因为补码 0000 0000 = 0 ;补码1000 0000 看似为 -0实际 = -2^7是规定
因为内部存储的是补码,正数的原码=反码=补码;最高位为符号位=0。负数反码=原码除符号位外全取反,补码=反码+1;最高位为符号位=1。
8个bit位的情况下,最大正数原码反码补码:0111 1111= 2^7-1
最小负数原码 :1000 0000 反码:1111 1111 补码 1000 0000
相当于最高位即代表符号位又代表值所以=-2^7
。
字符串不是基本类型,而是引用类型
浮点可能只是一个近似值,并非精确值
数据范围与字节数不一定相关,比如float和long,long8字节 的最大值2^63 ≈ 9.223E+18。float最大值数量级+38,远超。因为使用了科学计数法
浮点数默认double ,用float加后缀F或f。整型默认int用long加L或l(推荐用大写)
数据类型 变量名称;//创建了一个变量
变量名称 = 数据值;//赋值,将右数据值赋值交给左变量
数据类型 变量名称 = 数据值;
int num1;
num1 = 10;
num1 = 20;
int num2 = 25;
右侧数值范围不能超过左侧数据类型的取值范围,不然错
long num6 = 3000000L;//大写L更明确,必须加L
float num7 = 2.5F;//也是必须加F
错 因为var1,num没有初始化就不能使用 ×
boolean var1;
//boolean var2 = var1;
int num;
//System.out.println(num);
int a, b, c; a = 10; b = 20; c = 40;
int x = 100, y = 20, z = 300;
范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据;
//int num4 = (int)6000000000;
int num5 = (int)6000000000L;
System.out.println(num5);//1705032704
int num = (int)3.5;//3
精度损失。 char zifu1 = 's';
System.out.println(zifu1 + 1);//116
char zifu2 = '我';
System.out.println(zifu2 - zifu1);//24990
byte num6 = 2;
byte num7 = 34;
//byte result1 = num6 + num7;错
//因为num6 + num7运算时提升为int,结果也是int
int result2 = num6 + num7;
byte result3 =(byte)(num6 + num7);
char zifu3 = 'c';
int num = zifu3;//从小到大自动类型转换
System.out.println('中' + 0);//20013
//因为输出时, +将char计算前提升为int再计算
数字和字符的对照关系表(编码表)
ASCII:美国信息交换标准代码
Unicode:万国码,开头0~127,和ASCII一样,128开始有更多字符
float 和 long 赋值时后跟F或L,最好大写因为l与1容易混淆
不同数据类型的运算注意点:
?byte/short/char类型数据在计算时会自动提升为int,所以接收方必须是int或将结果强转
取模只针对整数,其他取模没意义
?运算当中有不同类型的数据,结果将会是数据类型范围大的那种
?对于String类型数据+为链接,后续加到的都为字符串
除非用小括号优先级最高,会先加再链接
例如:
System.out.println(50 + 70 + "str"+ 30 + 70);//120str3070
System.out.println("eat" + (40 + 50));//eat90
四则运算:+,-,*,/
取模,取余数:%(只有对整数用除法,取模才有余数的意义)
注意:一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种
String str1 = "Hello";
System.out.println("Hello" + "World");//HelloWorld
String str2 = "Java";
System.out.println(str2 + 20);//Java20
System.out.println(str2 + 20 + 30);//Java2030
System.out.println(str2 + (20 + 30));//Java50
任何数据类型和字符串进行连接时,结果都会变成字符串
++
让一个变量+一个数字1;--
让一个变量-一个数字1
++num,先+再用;num++,先用再+;--
同理
单独用前后无所谓
int x = 10;
int y = 20;
int result3 = ++x + y--;//11 + 20//x = 11,y = 19
只有变量才能用自增自减,常量不行
num++;√
30--;×
+= a+=1 相当于a = a + 1;
-= a -= 3 相当于 a = a -3;
*= 依次类推
/=
%=
注意:
1.只有变量才能使用赋值运算符,常量不能赋值
2.复合赋值运算符其中隐含了一个强制类型转换
byte num = 30;
num += 5;
分析过程 num = num + 5;
= byte + 5
= byte + int
= int + int 前面提过,byte,short,char计算时都会先自动提升成int再计算
= int -> byte = (byte)int
所以说复合赋值运算符中隐含了一个强制类型转换
● 3 > 4 ? 2 : 10
if(8 > (3 > 4 ? 2 : 10)){
System.out.println("nice");
}
int result = 3 > 4 ? 2 : 10;
System.out.println(3 > 4 ? 2 : 10);
● int result = 3 > 4 ? 2.5 : 10;
int result = 3 > 4 ? 2 : 10;
?byte/char/short 赋值时若右侧全为常量,如果右侧比较小,会隐含的补上一个强转。 如果右侧值超过,则报错
switch case 匹配到哪一个case就从哪一个位置向下执行,直到遇到break或整体结束
三种循环里,若条件从未满足,do -while 至少会执行一次
在IDEA中,delete一个Module,外部打开project打开还是存在的,怎么导入一个外部保存的Module
file-project structure + import module setup sdk即可
方法的三种调用形式,单独调,打印调,赋值调。void返回值类型只能单独调
一个方法中可以有多个return,但必须保证同时只走一个return
?重载: 多个方法的名称一样,但参数列表不一样 与参数名称无关,与返回值类型无关
辗转相除法
234/2 = 117 余0,117/2 =58余1依次类推,直到除数为0停止
234(DEC) = 11101010(BIN)
验证结果,
验证:1101 0101 100
数字信息流的基本单位是比特bit,为一个1或者1个0。所以表示带宽的单位就是bps,意思就是每秒通过的信息流的比特bit数。100M带宽就是100Mbps表示1秒钟通过信息流的比特数为100M,即100*2^20 bit= 1亿(100000000)个位。
因为 8bit = 1Byte,1MB = 2^20 Byte
所以 100Mb = 100/8 MB
100Mb/s = 12.5MB/s
byte b1 = y;
int i1 = 1243;
char c1 = "@";
char c2 = '';
char c3 = '34';
char c4 = '齐';
short s1 = 235;
double d1= 325.214;
float f1 = 1.2;
float f2 = 0;
long l1 = 1235321434543;
boolean bb1 = true;
String ss1 = "";
String ss2 = 's';
String ss3 = " 45# 53对";
A:
flaot数据在赋值时数值尾部带一个f或者F,long类型同理,带L或l,一般默认大写,因为小写l容易混淆
byte b1 = 12;
int i1 = 1243;
×char c1 = "@";//char c1 = '@';//字符必须用单引号
×char c2 = '';//char c2 = 'd';//字符不可以为空
×char c3 = '34';//char c3 = '3';//也不可以为两个字符
char c4 = '齐';//中文也算一个字符
short s1 = 235;
double d1= 325.214;
×float f1 = 1.2;//float f1 = 1.2F;//尾带F
float f2 = 0;//这里正确不是因为0是float类,而是因为自动类型转换,int数据范围更小
×long l1 = 1235321434543;//long l1 = 1235321434543L;//尾带L
boolean bb1 = true;
String ss1 = "";//可以为空
×String ss2 = 's';//String ss2 = "s";//字符串必须用双引号
String ss3 = " 45# 53对";
//空常量 null
int num1 = 10;
num1 += 3;
int num2;
System.out.println(num2);
int x, y, z;
double a = 1, b = 3.4, c = 5.6;
byte b1 = 34;
byte b2 = 5;
byte b3 = 128;
short s1 = 98;
short s2 = 23;
short s3 = 32768;
char c1 = '中';
char c2 = 65535;
char c3 = 65536;
long l1 = 12345L;
double d1 = 23.53;
int num3 = b1 + s1;
byte num4 = b2 + s1;
char num5 = b2 + s1 + c1;
b2 += s1;
int num6 = l1 + c2 + b2;
long num7 = l1 + c2 + b2;
double num8 = c2 + d1;
num3 > 7 ? num3 = '*' : num3 = '%';
A:
num1 += 3;
byte num1 = 10;
● num1 = num1 + 3;
//错误原因:byte/short/char类型变量计算时都是自动提升为int类型,需要Int类型的变量来接收运算结果
int num2;
● System.out.println(num2);
//错在num2没有初始化赋值,没有初始化之前只是定义了。不可以使用,包括打印或者运算
int x, y, z;
double a = 1, b = 3.4, c = 5.6;
//同时初始化定义多个变量,但必须得是同一个数据类型
byte b1 = 34;
//解释:虽然是int类型数据赋值给byte类型变量,但byte/short/char有编译器优化,即若赋值的是常量且不超范围,隐含的有一个强转。
byte b2 = 5;
● byte b3 = 128;
//byte是1个字节,2^7 范围-128 ~ 127
short s1 = 98;
short s2 = 23;
● short s3 = 32768;
//short两个字节 2^15,范围-32768 ~ 32767
char c1 = '中';
char c2 = 65535;
● char c3 = 65536;
//char取值范围:0~65535
long l1 = 12345L;
double d1 = 23.53;
int num3 = b1 + s1;
b2 += s1;
● byte num4 = b2 + s1;
● char num5 = b2 + s1 + c1;
//问题都在于byte/char/short类型数据运算时会自动提升为int类型
//而复合运算符会隐含一个强转,所以正确
● int num6 = l1 + c2 + b2;
l1是long类型变量,多种不同数据类型变量计算时,结果的数据类型与数据范围最大的那个一致 ,应该用范围大于等于long的数据类型接收
long num7 = l1 + c2 + b2;
double num8 = c2 + d1;
● num3 > 7 ? num3 = '*' : num3 = '%';
//三目运算符的结果一定要被接收,不然就是错
int num1 = 10;
int num2 = 34;
char num3 = '7';
char num4 = 97;
//--------------------------------------------------
//前置++和后置的区别,||,|两个或运算符区别
if(num1 < 9 || ++num4 > 97){
System.out.println(num4);
}
if(num1 < 9 || num4++ <= 98){
System.out.println(num4 + 0);
}
if(num1 > 9 || num4++ <= 98){
System.out.println(num4);
}
if(num1 > 9 | num4++ <= 98){
System.out.println(num4);
}
//&&,&两个并运算符区别
if(++num1 > 10 && ++num2 > 34 && ++num3 > '7' ){
System.out.println(num1 + "," + num2 + "," + num3);
}
if(++num1 < 10 && ++num2 > 34 && ++num3 > '7' ){
;
}else{
System.out.println(num1 + "," + num2 + "," + num3);
}
if(++num1 < 10 & ++num2 > 34 & ++num3 > '7' ){
;
}else{
System.out.println(num1 + "," + num2 + "," + num3);
}
if(num1++ > 11 || ++num2 > 34 || ++num3 > '7' ){
System.out.println(num1 + "," + num2 + "," + num3);
}
if(num1++ > 12 | ++num2 > 35 | ++num3 > '8' ){
System.out.println(num1 + "," + num2 + "," + num3);
}
if(num1 < 0 || num1 > 0 && num1++ >= 15){
System.out.println(num1);
}
if((num1 < 0 && num1 > 0) && num1++ >= 16){
;
}
else{
System.out.println(num1);
}
num3 = '%';
System.out.println(num3);
System.out.println(num3 + 0);
num3 = '(';
switch(num3){
case '*':
System.out.println("num3是*");
case '(':
System.out.println("num3是(");
case '$':
System.out.println("num3是$");
break;
case '@':
System.out.println("num3是@");
break;
default:
System.out.println();
break;
}
A:
int num1 = 10;
int num2 = 34;
char num3 = '7';
char num4 = 97;
//--------------------------------------------------
//前置++和后置的区别,||,|两个或运算符区别
if(num1 < 9 || ++num4 > 97){
System.out.println(num4);
} /*b(98) : 条件1 错,所以 ||或才会判断条件2,++num4先加再使用,98 > 97,if成功*/
if(num1 < 9 || num4++ <= 98){
System.out.println(num4 + 0);
}/*99 : num4先用后加,98 <= 98后再++ ,char类型运算提升为int输出 */
if(num1 > 9 || num4++ <= 98){
System.out.println(num4);
} /*c(99) :因为|| 中条件1true,已经可以确定结果是true,条件2不执行*/
if(num1 > 9 | num4++ <= 98){
System.out.println(num4);
}//d(100) | 和&都没有短路,已经能出结果也会执行所有条件
//&&,&两个并运算符区别
if(++num1 > 10 && ++num2 > 34 && ++num3 > '7' ){
System.out.println(num1 + "," + num2 + "," + num3);
}//11,35,8 :其中8是字符格式,&&是可以连续判断多个条件当没有错误的,就无法短路,全执行,++num1先加再用
if(++num1 < 10 && ++num2 > 34 && ++num3 > '7' ){
;
}else{
System.out.println(num1 + "," + num2 + "," + num3);
}//12,35,8 :条件1错,后续条件不执行
if(++num1 < 10 & ++num2 > 34 & ++num3 > '7' ){
;
}else{
System.out.println(num1 + "," + num2 + "," + num3);
}//13,36,9//条件1 错不影响全部条件都要执行
if(num1++ > 11 || ++num2 > 34 || ++num3 > '7' ){
System.out.println(num1 + "," + num2 + "," + num3);
}//14,36,9 : 条件1先用后加,11 > 11 false,短路,后续条件不执行
if(num1++ > 12 | ++num2 > 35 | ++num3 > '8' ){
System.out.println(num1 + "," + num2 + "," + num3);
}//15,37,:(10) :条件1 12 > 12先用后加到13 ,错不影响后续执行
if(num1 < 0 || num1 > 0 && num1++ >= 15){
System.out.println(num1);
}//16 :&& 优先级高于||,相当于(false || (true && true))
if((num1 < 0 && num1 > 0) && num1++ >= 16){
;
}
else{
System.out.println(num1);
} //16 :(false && true) && 不执行
//num3 > 7 ? num3 = '*' : num3 = '%';
num3 = '%';
System.out.println(num3);//%
System.out.println(num3 + 0);//37
num3 = '(';
switch(num3){
case '*':
System.out.println("num3是*");
case '(':
System.out.println("num3是(");
case '$':
System.out.println("num3是$");
break;
case '@':
System.out.println("num3是@");
break;
default:
System.out.println();
break;
}
//num3是(
//num3是$
//: 因为一遇到符合的case就进入,但遇到break才会退出