**
1.对象与类基础
**
1.1利用内存图理解Java程序运行机制
public class Address {
public String city;
public String street;
public int zipCode;
}
public class User {
public int id;
public String username;
public Address address;
}
public class Test {
public static void main(String[] args) {
Address a= new Address();
a.city="北京";
a.street="大兴区";
a.zipCode=666;
System.out.println("---------------");
User u= new User();
u.id=1;
u.username="lee";
u.address=a;
}
}
1.2构造方法
通过new关键字对构造方法进行调用,其目的是创建对象并给实例变量进行赋值(并非类加载时给实例变量赋值),缺省构造方法是无参构造方法,该方法在由程序员添加任意构造方法后消失,为了避免破坏已有的程序,请手动添加无参构造方法。
**
2.封装
**
2.1封装的好处
- 隐藏细节
- 安全可靠
public UnderGraduatet{
private age;
private int CET6score;
//隐藏细节
public void setScore(){
//按照应届参加英语考试的学生占比和题型占比进行计算
CET6score =??? ;
}
//安全可靠
public void setAge(int age){
if(age<= 0 || age >=200){
//异常处理
}
this.age = age;
}
}
**
static 和 this
**
3.1 static
static是一个关键字,可用于修饰变量和方法,被static修饰的变量叫做静态变量,修饰的方法叫做静态方法。
public Student{
static String schoolName="JiaLiDun";//静态变量
static String getSchoolName(){//静态方法
return schoolName;
}
}
访问静态变量和静态方法,常用类名.静态变量和类名.静态方法,如Student.schoolName和Student.getSchoolName。
什么时候用静态变量,什么时候用实例变量呢?
- 如果该变量是属于该类所有对象所共有的,用于描述这个类的特征,那么就使用静态变量。
- 如果该变量不是属于该类所有对象的,仅用来描述某个对象的特征,那就是用实例变量。
3.2类内部静态&实例方法调用关系及其对静态&实例变量调用关系
- 静态方法只能调用静态方法和静态变量
- 实例方法都可以调用实例方法,实例变量,静态方法,静态变量。
3.3静态代码块
静态代码块在类加载时执行(只执行一次),与静态变量的分配空间的时机是相同的。因此如果想在静态代码块中对静态变量赋值,那么静态变量一定要放在静态代码块上面。静态代码块执行的时机也说明了静态代码块不能对实例变量和实例方法进行访问。
3.4 this and this()
this用于指向本身对象,this不能出现在静态方法中,在实例方法内部实例变量一般可以省略this,但是当有同名的局部变量出现时,需要用this.实例变量显式声明实例变量。
this()务必写在构造方法第一行代码,用于调用其他构造方法,其目的就是代码复用。
class Student{
public int age;
public String name;
public String addr;
public Student(){
this(0," "," ");
}
public Student(int age ,String name,String addr){
this.age=age;
this.name=name;
this.addr=addr;
}
}
**
4继承
**
4.1什么是继承
类之间只能单继承,接口之间可以多继承。仅类之间而言,继承谈的是子类可以继承父类的所有属性和方法。(包括私有属性,私有方法,静态属性,静态方法)。
其中,私有属性和私有方法也可以被继承,只是子类对象无法直接调用,如果父类另外提供方法实现对私有属性的访问和私有方法的访问,那么子类对象可以调用此方法访问由父类继承而来的属性和方法。
静态属性和静态方法也继承了,但是静态方法不存在重写。
4.2方法的重写和重载区别
重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
**
5.多态
**
5.1 多态的存在条件
- 继承或实现:在多态中必须存在有继承或实现关系的子类和父类
- 方法的重写:子类对父类中的某些方法进行重新定义
- 父类引用指向子类对象
//父类
public class Animal {
public int age = 11;
}
//子类
public class Dog extends Animal {
public int age = 33;
}
public class DemoApplication {
public static void main(String[] args) {
//父类类型 对象 = new 子类类型()
Animal dog = new Dog();
System.out.println(dog.age);
}
}
输出
11
**
final
**
- final修饰的类是不可继承的。
- final修饰的方法是无法被重写的
- final修饰的变量只能初始化一次
**
抽象类
**
抽象类的基本语法:抽象类必须有abstract关键字,抽象类有构造方法,不一定有抽象方法。抽象方法是没有方法体的。抽象类不能new对象,非抽象类继承抽象类必须实现抽象方法。
public abstract class A{
public abstract void play();
}
**
接口
**
接口中定义两种东西,一种是公开的静态常量,一种是公开的抽象方法。
接口之间多继承,一个非抽象类可以实现多个的接口的方法。