1.java中的类型
包括基本数据类型和引用类型
· 基本数据类型(4类8种) 字节数 对应封装类:
·字符型(char) 2 默认值\u0000 Character
·整型
·字节型(byte) 1 默认值0 Byte
·短整型(short) 2 默认值0 Short
·整型(int) 4 默认值0 (默认类型) Integer
·长整型(long) 8 默认值0 Long
(定义时可以不加l,是int类型,低→高自动转换) (定义时要加l,自动拆装箱,必须是Long对象类型)
·浮点型
·单精度(float) 4 默认值0.0 Float(定义时要加f)
·双精度(double)8 默认值0.0 (默认类型) Double(定义时要加d)
·布尔型(boolean) 默认值false Boolean
2.自动装箱和拆箱(jdk1.5)
·自动装箱:把基本数据类型用对应的引用类型包装起来,使他们具有对象的特质
Integer num = 4;//会自动调用Integer类的valueOf(int i)方法, 相当于 Integer num = Integer.valueOf(4);,
关于Integer类的valueOf方法中使用IntegerCache,jvm默认会缓存-128-127之间的数字(可以通过配置修改),所以引出以下的陷阱
(Byte、Short、Long类的默认缓存-128-127 ;Character类的默认缓存0-127;Float和Double类不缓存)
/**
* Created by 111 on 2016/2/24.
*/
public class BoxTest {
public static void main(String [] args){
Integer a = 4;
Integer b = 4;
Integer c = 200;
Integer d = 200;
Integer e = new Integer(4);
Integer f = new Integer(4);
System.out.println(a==b); //true
System.out.println(c==d); //false
System.out.println(c.equals(d));//true
System.out.println(e==f); //false
System.out.println(e.equals(f));//true
}
}
·自动拆箱:把引用类型简化为基本数据类型
int i = new Integer(4);//会自动调用Integer类的intValue()方法
3.java中的值传递和引用传递
一种说法:基本数据类型属于值传递:传递的是原参数的拷贝,实参传递给形参的值,形参发生改变并不影响实参的值。
引用类型属于引用传递,传递的是对象的引用地址,形参和实参指向的同一个地址,形参发生改变实参也会发生改变。
另一种说法:java中均属于值传递,没有引用传递这一说。不管是基本数据类型和引用数据类型,传递的都是副本(即传值),有争议的是引用传递,当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用本身(不是引用的副本)是永远不会改变的。基本数据类型传递的是原始参数的值,引用类型传递的是引用参数的副本,这个副本存放的是参数的地址,如果函数中没有改变这个副本的地址,只是改变了地址中的值,那么在函数内的改变会影响到传入的参数,如果在函数中改变了副本的地址,如new一个对象,那么副本就指向 了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值。(引用于:java中的值传递和引用传递)
4.for循环的面试题
**
* Created by 111 on 2016/2/24.
*/
public class BoxTest {
public static void main(String [] args){
int i = 4;
for (com('A');com('B');com('C')){
i--;
System.out.print('D');
if(i<0){
break;
}
}
}
private static boolean com(char c){
System.out.print(c);
return true;
}
}
这里考察的是for循环的运行过程,下面这个简单的for循环是我们经常会使用的
for (int m = 0;m<4;m++){
System.out.print(m);
}
解析:for循环的结构为
for(赋值语句;判断条件(true/false);做运算){
//如果满足条件则执行此内容
}
运行过程为: 执行运行赋值语句→判断条件为true→执行大括号的内容→做运算→判断条件为true→执行大括号的内容→做运算。。。循环直到判断条件为false或者break跳出循环。
·类:
三者之间的关系:★接口可以继承接口
★抽象类可以继承抽象类、类,可以实现多个接口
★类可以继承抽象类、类,可以实现多个接口
7.多态中成员变量的特点
·成员变量:编译和运行均看等号左边
·成员函数:编译看左边(左边类中如果没有该方法则编译报错),运行看右边(运行右边类中覆盖的方法)
·静态成员函数:编译和运行均看左边,静态函数是和类同时存在的
父类
/**
* Created by 111 on 2016/2/29.
*/
public class Fu {
int num = 1;
public void method1(){
System.out.println("fu_1");
}
public void method3(){
System.out.println("fu_3");
}
public static void method4(){
System.out.println("fu_4");
}
}
子类
/**
* Created by 111 on 2016/2/29.
*/
public class Son extends Fu {
int num = 2;
public void method1() {
System.out.println("zi_1");
}
public void method2(){
System.out.println("zi_2");
}
public static void method4(){
System.out.println("zi_4");
}
}
/**
* Created by 111 on 2016/2/29.
*/
public class Test {
public static void main(String[]args){
int num = 4;
Fu fu = new Son();
fu.method1();//zi_1
fu.method3();//fu_3
fu.method4();//fu_4
}
}
· private 修饰的成员在同一类中可以被访问
· default 默认的在同一个包中可以被访问
· protected 修饰的成员在同一个包中和子类中均可以访问
· public 修饰的成员均可以访问
9. == 和 equals
·对于基本数据类型的比较用==比较两个字段值是否相等
·对于引用类型的比较:==比较的是两个引用类型所指向的对象的地址的值是否相等
equals比较的是两个引用类型所指向的对象中保存的内容是否相等(这里要注意String的比较)
/**
* Created by 111 on 2016/2/29.
*/
public class Demo8 {
public static void main(String [] args){
String s1 = "a";
String s2 = "b";
String s3 = "ab";
String s4 = "a"+"b"; //编译器会提前优化为 ab,保存在常量池中
String s5 = s1+s2;//未知,不可以优化,重新分配内存,保存在堆内存中
System.out.println(s3==s4);//true
System.out.println(s3==s5);//false
}
}