1.Import 用来引入其他包中你所需要的类,但不能找到没有包的类。
2.堆(Heap)和栈(Stack)的区别:(它们均由JVM虚拟机管理分配)
堆 用来存放所有的对象,包括所有的实例变量,其空间在程序运行时分配
栈 用来存放方法调用和局部变量
name age
Student s0 = new Student(“xiaowang”,20);
s0 = new Student(“wangpeng”,30);
当读到该语句时,栈中创建s0和name age并赋值name = “text”,age = 20;
new的时候堆创建实例和实例变量,并拷贝name 和 age的值,this.name =“text”,this.age = 20;
然后new中的”=”号使得s0指向创建的实例对象。当s0再new一个实例的时候原来的指向消失,指向一个新的实例,原来的实例被垃圾回收。
3. 构造函数
构造函数在被赋值前被调用(如2中的new),主要实现对象的初始化。构造函数没有返回值,即使是void类型也会报错!子类的构造函数通过super()调用父类构造函数。如果父类中定义了带参的构造函数,则子类构造函数必须在第一行调用相应的带参super(),否则出错。构造函数可以重载但不能被继承。可以在构造方法的第一行使用this关键字调用其它(重载的)构造方法
Eg: Class Person{
Person(int a,int b){}
Person(){
This(20,30);
}
}
4.成员变量初始化的默认值
5.对象中属性和方法的可见度:
Public: 通用
Protected: 同类,同包, 不同包中子类的方法中通过supper.(方法/属性)来访问
Default: 默认,即不写的时候。同类, 同包
Private: 只能同类中
6.方法内定义变量时:
除了final外不能使用其他的修饰符;在使用之前必须初始化,但如果没有使用可以不初始化。
7. ==与equals的区别
==用于比较两个primitive 主数据类型或者判断两个引用是否引用同一个对象
Equals主要用来比较两个字符串是否一样,返回一个boolean值;
用法:String str1 = "aa";
String str2 = "aa";
if(str1.equals(str2)){}
8. 继承:
Is – a Has –a当两个类满足这两种模型时才能继承。Java不能多继承
9.重载(overload)和重写(override)的区别:
重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型
重写方法不能使用比被重写方法更严格的访问权限
不能抛出更大的异常
重载只是参数列表不同而已,可以看成是互不相关的几个方法
10.多态(有点难)
一个引用类型变量可能指向(引用)多种不同类型的对象
§ Person p = new Student();
§ Object o = new Person();
§ o = new Student();
一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法。School是Student类添加的属性。
§ Student m = new Student();
§ m.school = "pku"; //合法
§ Person e = new Student();
§ e.school = "pku"; //非法
11造型(对象间的强制类型转换):
从子类到父类的类型转换可以自动进行
从父类到子类的类型转换必须通过造型(强制类型转换)实现
无继承关系的引用类型间的转换是非法的
Animal a = new Dog();
Dog d = (Dog)a;
//error子类也不能接收子类的实例
Animal a = new Animal();但这样就出错了
Dog d = (Dog)a;
//errorDog就只能接收Dog类型
12.其他:
Instanceof用于判断一个实例是否是另一个类的实例。用法if(e instanceof Student)返回一个boolean值。