java 知识点
1. java泛型
避免编译错误 (ArrayList定义时候) 避免强制类型装换
2 多态的体现
实现多态主要有以下三种方式:
1. 接口实现
2. 继承父类重写方法
3. 同一类中进行方法重载
3.接口和抽象类的区别
1.抽象类可以有方法实现,jdk.1.8之前接口不能有方法实现
2.抽象类可以有构造方法,接口不能有构造方法
3.抽象类可以被集成,接口只能被实现
4.抽象方法可以有public,protected和default等修饰 接口默认是public,不能使用其他修饰符
4.java访问修饰符
5 final, finalize和finally的不同之处
final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该变量的值在初始化后不能被改变。finalize 方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。finally 是一个关键字,与 try 和 catch 一起用于异常的处理。finally 块一定会被执行,无论在 try 块中是否有发生异常。
6 java 数据类型
① 基本数据类型
整数值型:byte,short,int,long,
字符型:char
浮点类型:float,double
布尔型:boolean
整数默认int型,小数默认是double型。Float和long类型的必须加后缀。
② 引用数据类型
引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。引用类型包括类、接口、数组等。String类还是final修饰的。
7 &和&&的区别?
电路问题总结:
对于:& -- > 不管怎样,都会执行"&"符号左右两边的程序
对于:&& -- > 只有当符号"&&"左边程序为真(true)后,才会执行符号"&&"右边的程序。
下面来说说运算规则:
对于:& -- > 只要左右两边有一个为false,则为false;只有全部都为true的时候,结果为true
对于:&& -- > 只要符号左边为false,则结果为false;当左边为true,同时右边也为true,则结果为true
8.什么是值传递和引用传递?
值传递是传递值得副本
引用传递是传递对象的引用
9 . Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
重载: Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况
覆盖 : 方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
10 手写单例
public class Singleton{
private static Singleton single=null;
public synchronized static Singleton getInstance() {
if(single == null){
single = new Singleton();
}
return single;
}
}
11. String和StringBuilder、StringBuffer的区别?
String 不可变 StringBuffer/StringBuilder 可变
StringBuffer线程安全 StringBulider 线程不安全
12 Java的数据结构有那些?
1.线性表(ArrayList) 2
链表(LinkedList) 3
队列(Queue) 4
树(Tree)
13 ++i与i++的区别
i++ : a = i++ 它等价于 a = i ; i = i + 1;
++i : a = ++i 它等价于 i = i + 1; a = i;
14 java关键字 super 和 this
super: 是指父类,想要在子类方法中调用父类的实例变量或方法可以通过super 来访问
this:是指当前类,想要访问当前类的实例变量和方法可以使用this,同时可以省略
15 java 基本数据类型及自动类型提升
基本数据类型:8种
1.整型:
byte 1个字节 8位 -128到127
short 2个字节 16位 -2^15到(2^15)-1
int 4个字节 32位 -2^32到(2^32)-1
long 8个字节 64位 -2^64到(2^64)-1
2.浮点类型:
float 4个字节 32位
double 8个字节 64位
3.字符类型:
char 2个字节 16位
4.布尔类型:
boolean 1个字节 false/true 默认(false)
注:
1.java中的自动类型提升问题:
正向过程:由低字节向高字节自动转换
byte->short->int->long->float->double
逆向过程:使用强制转换,可能丢失精度。
16 中文字节长度问题
UTF-8占3字节
GBK 2字节
GB2312 2字节
17 在jdk 7 之前,switch 只能支持 byte、short、char、int 这几个基本数据类型和其对应的封装类型。switch后面的括号里面只能放int类型的值,但由于byte,short,char类型,它们会 自动 转换为int类型(精精度小的向大的转化),所以它们也支持。
jdk1.7后,整形,枚举类型,boolean,字符串都可以。
为什么jdk1.7后又可以用string类型作为switch参数呢?
其实,jdk1.7并没有新的指令来处理switch string,而是通过调用switch中string.hashCode,将string转换为int从而进行判断。
18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。
19 try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在方法返回调用者前执行。Java允许在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,这会对程序造成很大的困扰,C#中就从语法上规定不能做这样的事。