@(Java知识点总结)[Java, Java面向对象]java
[toc]程序员
Java对象的使用时经过引用进行的
基本数据类型直接赋值,引用类型传递的是一个地址
栈:存放局部变量
堆:存放new出来的对象
方法区:存放类的信息(代码) 、static变量、常量池(字符串常量)等...this
Student s1 = new Student(); s1.name="张三"; s1.study(); s1.sayHello("王武"); Student s2 = new Student(); s2.age = 18; s2.name="李四";
静态初始化代码块spa
static{code
...
}对象
若是但愿加载后,对整个类进行某些初始化操做,可使用static初始化块继承
是在类初始化时执行,不是在建立对象时执行ip
静态初始化块中不能访问非static成员内存
执行顺序:上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到咱们的类的静态初始化块为止资源
多态性是OOP的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程当中才被决定而非在编译期间就决定了。
这对于大型信息来讲能提升系统的灵活性和扩展性
引用变量的两种类型:
多态的存在要有3个必要条件:
子类若是重写了父类中的方法,方法调用的时候与实际类类型相绑定(传递的隐式参数this指向的开辟内存空间的类的对象,而不是父类的对象)
public class Test { public static void testAnimalVoice(Animal c) { c.voice(); if (c instanceof Cat) { ((Cat) c).catchMouse(); } } public static void main(String[] args) { Animal a = new Cat(); Cat a2 = (Cat) a; testAnimalVoice(a); } } class Animal { void voice() { System.out.println("发出动物的叫声"); } } class Cat extends Animal { private String name = "Tom"; void catchMouse() { //方法存在隐式参数this和super super.voice(); System.out.println(this.name+"抓老鼠"); } }