Java学习笔记 第三章 面向对象
JAVA学习笔记第三章
3.JAVA面向对象
3.1面向对象的三个阶段
3.2创建类
3.3创建对象
Person tony = new Person();
3.4局部变量和成员变量的区别
3.5构造方法
构造器的目的不是为了创建对象,因为在调用构造器的时候,对象已经创建好了,并且属性有默认的初始化的值,调用构造器的目的是给属性进行赋值。
一般我们会重载构造器,在重载的构造器中进行属性的赋值。
重载构造器以后,如果空构造器没写,那么系统也不会再分配空的构造器,那么调用空构造器的话会出错。
public class Person{
//属性
//没有任何参数的构造器称为空构造器
public Person(){
}
//注意我们不会在空构造器中进行初始化的操作,系统会默认给我们分配一个构造器,只是我们看不到罢了
//但是后面学习一些东西的时候,需要用到空构造器,我们一般还是加上
//方法
}
程序存在就近原则,在对象的属性前面加上this来修饰,this表示正在创建的那个对象
3.6内存分析
3.7this
需要使用this.age,就可以拿到Person类中的属性age
this.eat();
this(name, age);
3.8static
static修饰属性:
属性:
- 静态属性(类属性)
- 非静态属性(实例变量)
staic修饰方法:
static修饰的方法优先于对象存在,在静态方法中不能访问非静态的属性和方法,在静态方法中不能使用this关键字。
- 不能访问非静态的属性
- 不能访问非静态的方法
- 不能使用this关键字
- 非静态的方法可以使用对象名.方法名调用,静态的方法既可以创建对象来调用也可以使用类名.方法名调用。
3.9代码块
代码块分类:普通块、构造块、静态块、同步块(多线程)
普通块在类的方法中:一般限制局部变量的作用域
构造块在类的方法之外:实现在方法外写代码,优先于普通块执行
静态块:在构造块的基础上加上static修饰,同样由于static修饰,静态块只能访问到静态属性和静态方法,且较构造块先执行,在类加载的时候执行一次
执行顺序:静态块>构造块>普通块
3.10包
包的作用:
- 解决.java重名问题
- 解决权限问题
包名定义:全部小写,中间用.隔开,加上域名.模块名,不能使用系统关键字(nul,con,com1-com9),包声明一般在非注释性代码第一行
java的导包没有包含和被包含的关系,设置目录是平级的
静态导入
在静态导入以后,同一个类有相同的方法,优先使用自己定义的。
3.11封装
3.12继承
内存分析:
权限修饰符:
重写:
supper:
因为super和this都要放在第一行,并且super()和this()构造器同时使用会覆盖值。
object类:
object类中toString方法:将类转换成字符串
object类中的equals方法:提供对象的内容是否相等,对象的内容指的就是属性,但是object类提供的就是比较两个类的地址,一般不会直接使用,会在继承object类中重写方法,自己定义判断是否相等
自动生成equals
类和类之间的关系
3.13多态
多态和属性无关,多态指的是方法的多态,而不是属性的多态
可以提供扩展性,但是扩展性没有达到最好,以后还会学习反射
简单工厂模型:
3.14final
final可以修饰变量、方法、类
final修饰变量
final修饰方法
final修饰类
3.15抽象类和抽象方法
3.16接口
使用接口中的非抽象方法:
接口中的静态方法:
为什么jdk1.8之后新增非抽象方法:
3.17内部类
局部内部类: