1:面向对象三大特征
封装:
类:封装的是对象的属性和行为
方法:封装的是具体的业务逻辑功能实现
访问控制修饰符:封装的是具体的访问权限,以保护数据的安全
继承:
作用:代码复用
超类:所有派生类所共有的属性和行为
接口:部分派生类所共有的属性和行为
派生类:派生类所特有的属性和行为
单一继承、多接口实现,具有传递性
多态:
行为多态:所有抽象方法都是多态的(通过方法的重写实现的)
对象多态:所有对象都是多态的(通过向上造型来实现)
向上造型、强制类型转换、instanceof判断
2:内存管理:由JVM来管理的
堆:
存储new出来的对象(包括实例变量)
垃圾:没有任何引用所指向的对象
垃圾回收器(GC)不定时到内存中清扫垃圾,回收过程是透明的(看不到的),
不一定一发现垃圾就立刻回收,通过调用System.gc()可以建议JVM尽快调度GC回收
实例变量的生命周期:
创建(new)对象时存储在堆中,对象被回收时一并被回收
内存泄漏:不再使用的对象没有被及时的回收,严重的泄漏会导致系统的崩溃
建议:不再使用的对象应及时将引用设置为null
栈:
存储正在调用的方法中的局部变量(包括方法的参数)
调用方法时,会在栈中为该方法分配一块对应的栈帧,栈帧中存储局部变量(包括方法的参数),方法调用结束时,栈帧被自动清除,局部变量一并被清除
局部变量的生命周期:
调用方法时存储在栈中,方法调用结束时与栈帧一并被清除
方法区:
存储.class字节码文件(包括静态变量、所有方法)
方法只有一份,通过this来区分具体的访问对象
3:关于String的面试题
/*
String s = new String("hello");
问:如上语句创建了几个对象?
答:2个
第一个:字面量"hello"
---java会创建一个String对象表示字面量"hello",并将其存入常量池
第二个:new String()
---new String()时会再创建一个字符串对象,并引用hello字符串的内容
*/
String s = new String("hello");
String s1 = "hello";
System.out.println("s:"+s); //hello
System.out.println("s1:"+s1); //hello
System.out.println(s==s1); //false,==比较的是地址是否相同
//字符串实际开发中比较相等一般都是比较字符串的内容
//因此我们需要使用equals()方法来比较两个字符串的内容
System.out.println(s.equals(s1)); //equals()比较的是内容是否相同
4:互补对称:
结论:一个数的补码=这个数取反+1(取反+1) 公式: -n=~n+1
-3的补码=-3取反+1
面试题:
System.out.println(~100+1); 前面代码的运算结果是(C):注:求100的补码
A.-98 B:-99 C:-100 D:-101
System.out.println(~-100+1); 前面代码的运算结果是(C): 注:求-100的补码
A.98 B:99 C:100 D:101
5:java的8种基本类型是什么?
1)byte:字节型,用于存储整数的,占用1个字节,范围-128到127
2)short:短整型,用于存储整数的,占用2个字节,范围-32768到32767
3)int:整型,用于存储整数的,占用4个字节,范围-2^31到2^31-1
4)long:长整型,用于存储整数的,占用8个字节,范围-2^63到2^63-1
5)float:单精度浮点型,用于存储小数的,占用4个字节,不能表示精确的值
6)double:双精度浮点型,用于存储小数的,占用8个字节,不用表示精确的值
7)boolean:布尔型,用于存储true或false的,占用1个字节
8)char:字符型,采用Unicode字符编码格式,用于存储单个字符,占用2个字节
6:switch能作用在哪些数据类型上?
答:switch可以作用于:byte,short,int,char,String,枚举类型,其它类型不允许
7:重写与重载的区别?
1)重写:发生在父子类中,方法名相同,参数列表相同
----用于在派生类中修改超类中所声明的方法
2)重载:发生在同一类中,方法名相同,参数列表不同
----完全不同的方法,只是方法名正好相同
8.实例变量与静态变量的区别?
1.实例变量与静态变量的区别:
1)实例变量:属于对象的,在创建对象的时候存储在堆中,
创建多少个对象,则实例变量就会在堆中存在多少份
通过引用(对象)打点来访问
2)静态变量:属于类的,在类被加载期间存储在方法区中,
无论创建多少个对象,静态变量在方法区中都只存在一份
通过类名打点来访问
9:String s = new String("abc");创建了几个对象?
10.java是值传递还是引用传递:
--java中无论是基本类型还是引用类型,都是值传递
--1)对于基本类型而言,传递的是具体的值的副本
--2)对于引用类型而言,传递的是具体的地址的副本
11==和equals的区别:
1)==:对于基本类型而言,比较的是数值是否相等
对于引用类型而言,比较的是内存地址是否相等
2)equals:String中重写了equals(),用于比较字符串内容是否相同,若不重写equals()则默认调用Object中的equals()还是比较地址,所以equals()常常被重写来比较对象的数据是否相同