Java面向对象知识总结

1形参个数可变的方法

最后一个参数类型后面的(...)

public static void test(int a,String...strings ) {
	for(String tmp : strings) {//本质:string数组循环
		System.out.println(tmp);
	}
	System.out.println(a);
}
public static void main(String[] args) {
	test(5,"123","12345");
}

2.无论是通过类还是通过实例来访问类变量其实访问的都是同一片内存区,也就是说都可改变类变量的值

3.import语句中的星号(*)只能代表类,不能代表包,及该报下的类都被导入,而子包下的类则没有被导入

4.构造器其实就是构造方法,如果在一个构造方法中包含了另一个构造方法,可以采用this来调用相应的构造器

5.多态的理解: 父类 变量名 = 子类 变量名();

只能调用父类有的方法名,不能调用子类,且在输出实例变量时仍为父类变量,但是将父类赋给子类时,则需要进行强制类型转换,可采用运算符instanceof进行判断。且进行强制类型转换必须要有继承关系,才能进行运算,再判断是否正确。

instranceof作用:在进行强制转换之前,判断前一个对象是否是后一个对象的实例。

public static void main(String[] args) {
	double d=13.4;
	long l=(long)d;//基础类型可以在数值间进行类型转换,无法与布尔类型进行转换
	System.out.println(l);
	Object obj="hello";
	String objStr=(String)obj;
	System.out.println(objStr);//object与String具有继承关系,可以进行类型转换
	Object objpri=Integer.valueOf(5);//返回一个Integer的实例
	String str=(String)objpri;//两者之间不具有继承关系,错误。
}

6.当使用实例来访问类成员时,实际上依然是使用该类来访问成员,因此即使某个实例为null,它也可以访问所属类的类成员

public class Var {
	private static void test() {
		System.out.println("static 修饰的类方法");
	}
public static void main(String[] args) {
	Var nas=null;
	nas.test();
}
}

7.静态初始化块,初始化块,构造器的执行顺序:

类初始化阶段,先执行父类的最顶层的静态初始化块,然后依次向下,直到当前类的静态初始化块,

对象初始化阶段,先执行最顶层的父类初始化,父类构造器,再依次向下直到当前类。

当再次创建该对象时,不会再有类初始化阶段

8.字符串与基本类型的相互转换的两种方法:parseXXX,valueOF

String intstr="123";
	int it1=Integer.parseInt(intstr);
	int it2=Integer.valueOf(intstr);
	System.out.println(it1+"  "+it2);

9,自动装箱:把一个基本类型赋给一个包装类实例。包装类的实例实际上是引用类型,只有两个包装类引用指向同一个对象才会返回true

Integer ina=2;
	Integer inb=2;
	System.out.println(ina==inb);//输出true
	Integer biga=128;
	Integer bigb=128;
	System.out.println(biga==bigb);//输出false

integer数组的长度为-128~127,当输入128会自动缓存为另一个数组,因此地址不同

10.缓存:

Integer in2=new Integer.valueOf(6);//创建一个Interge对象并缓存
	Integer in3=new Integer.valueOf(6);//直接从缓存中提取

11.接口中定义的方法:

public interface Output {
	int Max=50;//相当于public static final int Max=50
	void out();
	void getdata(String msg);
	default void print(String ...msgs) {
		for(String msg : msgs) {
			System.out.println(msg);
		}
	}
	default void test() {//接口中定义默认方法,需要使用default修饰。默认方法就是实例方法
		System.out.println("默认的test()方法");
	}
	static String statictest() {//接口的类方法,需要使用static修饰,可以直接通过接口调用。
		return "接口的类方法";
	}
	private void foo() {
		System.out.println("foo的私有方法");
	}
	private static void bar() {
		System.out.println("bar的静态私有方法");
	}

一个接口可以继承多个父接口,接在extends后,Output与Output1无继承关系

public interface Output2 extends Output,Output1

12.静态内部类可以包含静态成员,也可以包含非静态成员,静态内部类不能访问外部类的实例成员,只能访问外部类的类成员

猜你喜欢

转载自blog.csdn.net/printfxgd/article/details/81389282