2022.5.3
.class文件是给JVM运行的
bin的javac.exe来编译.Java文件成.class文件
Java.exe将.class文件运行(JVM中)
Jdk包含jre,jre包含jvm虚拟机
src和bin的区别:
开发好的源文件到.class(即编译后文件)在bin目录下面,src放源文件
修改文件编码,Preference搜索Workspace:UTF-8 gbk.......。。。
快捷键:
ctrl+d:删除光标所在行
Ctrl+alt+上或下:快速复制
Alt+shift+r:重命名
Alt+shift+a:开启、取消多行编辑
F11:快速运行
【面试题】Final修饰的常量是不能修改指向还是不能修改内容?
不能修改指向但是可以修改内容
final修饰的变量其实就是相当于定义了一个变量,无法修改的变量
如果final修饰的是一个引用变量,那么该变量在栈内存存的是一个内存地址,改地址就不能改变,但是该内存地址所指向的那个对象还是可以变的。
成员变量默认是有初始值的
【面试题】char能否存汉字?可以的,但是有些没有录入到unicode表的特殊汉字是不行的
八大基本类型:byte[-128,127] short int long float double char boolean
数据类型转换:
- 隐式转换(自动):范围小的赋给范围大的
例如:byte xx =1;int yy = xx;xx = yy//程序报错,因为int范围更大,无法进行隐式转换,进行强制转换,xx = (byte)yy;
- 强制转换(手动):范围大的赋给范围小的,有可能会溢出(循环)
例如:byte xx =1;int yy = 128;xx = yy,输出:-128,溢出1,循环到-128,因为范围是【-128,127】
- 数据类型的自动提升
①字面整数默认的类型是int
②byte short char int 直接的运算结果类型都是Int
③操作数相互运算结构类型为范围较大的
例如:byte a=1;byte b = a+1;//程序报错,因为a+1都是直接默认为int,所以可以int b = a+1
Int e = 1;Long h = 1L;int i = e+h;//程序报错,因为③,类型long范围更大,所以int long = e+h
【面试题】float和long分别占用多少字节?请问float表示范围大还是Long?
原因:储存方式不一样,
Float类型:单精度。在内存中占用4个字节,共32位(bit)。它的取值范围按常理应该是 -2^32~2^32-1
long类型:长整型。在内存占用8个字节,共64位(bit)。它的取值范围为 -2^64~2^64-1
很明显应该是long整型比float整型的取值范围更大。但是浮点数的取值范围并不是这么表示的。
V=(-1)^E * N * 2^M
数据转换问题:Byte data = 1;
Data = data+1;//报错,数据类型
Data+=1;//不报错,因为编译器做了优化会进行强转,注意数据溢出问题,变成了data = (byte)(data+1)
【面试题】int 和Integer有什么区别?
Java是面向对象的编程语言,为了编程方便引入了基本数据类型,但是为了能够这些数据类型当做对象操作,引入了对应的包装类型,Int的包装类就是Integer,从Java5开始引入了自动装箱/拆箱集中,使得两者互相转换
结果:Flase true
A==b?比较的是是否引用同一个对象,但是其实是创建了两个不同的对象
A==c?比较的是a自动拆箱成Int类型,与c的值比较是否相等
【延伸】Double类parseDouble()和valueOf()方法的区别?
- 参数区别:Double.parseDouble()的参数只能是String,而Double.valueOf()参数类型可以是浮点型或者字符串
- 返回类型的区别:Double.parseDouble()把数字类型的字符串转换成double类型;Double.valueOf()把数字类型的字符串转换成Double类型
&按位与:都是1则1
例如:System.out.println(1&2);
0001(1)
0010(2)
0000(0)
|按位或:有1则1
例如:System.out.println(1|2);
0001(1)
0010(2)
0011(3)
^按位异或:相同为0不同为1
<<向左移
0010(2)向左移,左边消两零,往右边补
1000(8)
>>向右移
【面试题】&& & || |区别
&& ||都是逻辑操作
& |可以做位运算也可以做逻辑运算,特点:没有短路功能
第一行短路了,执行到Flase不执行后面。第二行不会短路
【面试题】switch支持的数据类型有哪些?
- switch底层是使用int类型来判断的,int类型是四个字节的整数型类型,所以只要字节小于或等于4的整数型类型都是可以转化成int类型的,所以支持byte[1字节],short[2字节]都是可以理解的,long[8字节]超出了int的范围,因而不支持。
- 关于枚举和字符(串)也是转化为int类型间接实现的。枚举是再编译的过程中产生了一个新的数组,switch是通过转化成数组的形式来实现对枚举类型的支持。
【面试题】==和equals的区别
当 "=="运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。
另外,对于包装器类型,equals方法并不会进行类型转换,比较内容。
【面试题】如何退出双循环,当i=3 j=4时退出全部循环?
里面控制外层循环条件,break;
boolean sign = true;
for(int i=1;i<=5;i++){
for(int j =1;j<=5;j++){
System.out.println("i="+i+",j="+j);
if(i==3 && j==4){
sign = false;
break;
}
}
if(sign)break;
}
控制跳出循环条件有:break➕ flag变量法