基本常识
1.JDK,JRE,JVM分别是什么?
(1)作用
JVM(Java Virtual Machine):保证Java语言跨平台
JRE(Java Runtime Environment):Java程序的运行环境
JDK(Java Development Kit) :Java程序的开发环境
(2)关系
JDK:JRE+工具
JRE:JVM+类库
2.path环境变量(掌握)
(1)path环境变量的作用:保证javac命令可以在任意目录下运行。
(2)path配置的方案:
新建:
变量名:JAVA_HOME
变量值:D:\develop\Java\jdk1.7.0_60
修改:
变量名:Path
变量值:%JAVA_HOME%\bin;以前的内容
3.classpath环境变量
(1)classpath环境变量的作用:保证class文件可以在任意目录下运行
数据类型
1. 8中基本结构是什么?
原始类型: boolean,char,byte,short,int,long,float,double(String不是基本类型)
封装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
1、包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,基本类型不是
2、包装类型是引用的传递,基本类型是值的传递
3、声明方式不同,基本数据类型不需要new关键字,而包装类型需要new在堆内存中进行new来分配内存空间
4、存储位置不同,基本数据类型直接将值保存在值栈中,而包装类型是把对象放在堆中,然后通过对象的引用来调用他们
5、初始值不同,eg: int的初始值为 0 、 boolean的初始值为false 而包装类型的初始值为null
6、使用方式不同,基本数据类型直接赋值使用就好 ,而包装类型是在集合如 coolection Map时会使用
2.float f1 = (float)11.11; float f2 = 11.11f; 这两种定义数据有什么不同吗?
f1其实是通过一个double类型转换过来的。而f2本身就是一个float类型。
3.java语言中的字符char可以存储一个中文汉字吗?为什么呢?
char类型变量是用来储存Unicode编码的字符的,unicode字符集包含了汉字,所以char类型当然可以存储汉字的。
如果某个生僻字没有包含在unicode编码字符集中,那么char就不能存储该生僻字。
4. byte b1=3, b2=4 , b ; b=b1+b2 ; b=3+4 ; 哪句是编译失败的呢?为什么呢?
b = b1 + b2;会编译失败
因为当是变量相加时,会首先看类型,最终把结果赋值的也会考虑类型问题。
常量相加,首先是先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才会报错。
通过反编译工具也会发现上面的代码、会直接被编译为(.class)
byte b1 = 3 , b2 = 4 , b ;
b = 7 ;
5. byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
我们要想知道结果是什么,就应该知道是如何进行计算的。而我们又知道计算机中数据的运算都是补码进行的,显示给我们的是原码转换为十进制的数字。那我们要得到补码,首先要计算出数据的二进制。
- 获取130这个数据的二进制。
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。 - 做截取操作,截成byte类型的了。
10000010
这个结果是补码。 - 已知补码求原码。
符号位 | 数值类 | |
---|---|---|
补码 | 1 | 0000010 |
反码 | 1 | 0000001 |
原码 | 1 | 11111110 |
byte b= (byte)130;//强制转换
System.out.pringln(b);//-126
对应我们看见的十进制就是 -126
6. short s = 1; s = s + 1;有没有问题?如果有怎么解决?short s = 1; s += 1;有没有问题?如果有怎么解决?
1) 对于short s1=1;s1=s1+1来说,在s1+1运算时会自动提升表达式的类型为int,那么将int赋予给short类型的变量s1会出现类型转换错误。
2) 对于short s1=1;s1+=1来说 +=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
7. Integer和int的区别
int是java的8种基本数据类型之一。Integer是Java为int类型提供的封装类。
int变量的默认值为0,Integer变量的默认值为null,这一点说明Integer可以区分出未赋值和值为0的区别,
比如说一名学生没来参加考试,另一名学生参加考试全答错了,那么第一名考生的成绩应该是null,第二名考生的成绩应该是0分。
Integer类内提供了一些关于整数操作的一些方法。
8.switch语句能否作用在byte上,能否作用在long上,能否作用在string上?
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量,
整数表达式可以是int基本类型或Integer包装类型。
由于,byte,short,char都可以隐式转换为int,所以,这些类型以及这些类型的包装类型也是可以的。
long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,
所以,它们不能作用于swtich语句中。
不过,在1.7版本之后switch就可以作用在string上了。
补充:1.default是在case全都不匹配的情况。
2.default放在任意的位置都可以。
3.没有匹配值的时候default就是进入点,进入default以后会和普通进入点一样,如果没有break继续执行下面语句。
运算符
& 按位与
| 按位或
^ 按位异或
~ 取反
>> 右移
<< 左移
1. &和&&的区别是什么? |和||的区别是什么?
1,当使用“&”时,明确的表示多个条件都判断了,如果在多个表达式中有条件返回了false,剩余的条件也要判断;而如果使用“&&”(短路与),只要有条件返回false,剩余条件不再判断,返回false。
2,当使用“|”时,明确的表示多个条件都判断了,如果在多个表达式中有条件返回true,剩余的条件也要判断;而如果使用“||”(短路非),只要有条件返回true,剩余条件不再判断,返回true。
2. 位运算符的特点是什么?
&是二元运算符,它以特定的方式的方式组合操作数中对应的位 如果对应的位都为1,那么结果就是1, 如果任意一个位是0 则结果就是0,(全1为1,有0为0)
| 跟 & 的区别在于 如果对应的位中任一个操作数为1 那么结果就是1(有1为1,有0为0)
^运算符跟 | 类似,但有一点不同的是 如果两个操作位都为1的话,结果产生0(相异为1,相同为0)
~是对位求反 1变0, 0变1(1变0, 0变1)
移位运算符移位运算符把位按指定的值向左或向右移动
举例:2<<1=4 2<<2=8 2<<3=16 4<<1=8