面向对象
一.This
1.1 是什么
是每个对象中,保存自身内存地址的一个引用类变量.(成员变量)
成员变量无法出现在静态上下文中使用
1.2 做什么
1.用在成员方法和构造方法在,区分同名的局部变量和成员变量.(类名区分同名的静态变量和局部变量)
2.用在构造方法中,用于重载调用当前类中其他构造方法,提高代码重用性
3.return this 可以链式调用
1.3 怎么用
1.3.1 区分成员变量和局部变量
class MyDate{ private int year; } public void setYear(int year){ this.year = year }
1.3.2 重载调用构造方法
1.3.3 链式调用
1.4 注意
一个类可以有多个对象
无法从静态上下文中引用非静态变量this
二.Static
2.1 是什么
static关键字 , 是修饰静态的修饰符
2.2 做什么
1.修饰静态变量 2.修饰静态方法 3.修饰静态语句块
2.3 怎么用
//静态变量 static int a = 2; //静态方法 public static void m1(){ } //静态语句块,可以看作一个没有名字的静态方法 //在程序加载时,自动调用执行,并且只执行一次(main方法之前执行,多个从上到下执行) //一般用于类初始化 static{ System.out.println("静态语句块1"); } static{ System.out.println("静态语句块2"); } public static void main(String[] args){ System.out.pringln("main方法"); }
方法>变量=静态语句块>main方法
动态加载
2.4 实例语句块
等同于成员方法,创建对象的时候执行,并且创造一次就执行一次.(在构造函数之前执行)
2.5 静态和成员的应用场景
静态变量是类的所有对象共有的属性和值 成员变量是类的所有对象共有的属性,值可以相同也可以不同.
三.封装
3.1 软件包机制
3.1.1 package
package的优点: 1.分类管理 2.解决命名冲突问题
命名:一般采用公司域名倒序的方法命名
在java中.package语句 是限制class文件的保存位置,与java文件无关.
package语句 可以不写,如果写的话,必须写在java源文件的第一行
3.1.2 import
1.同目录下的类,可以直接使用
2.不同目录下的类,需要写类全名(带有包名的类名)
导包语句 (import)需要写在class之上,package以下,导入之后,就可以在该类中直接通过类名使用,而不用写类全名 包.* 是导入该包中的所有类
3.1.3 注意
java.lang.*为核心类,使用不需要导入
eclipse编程中,按空格和回车的时候会自动导包,此时需要注意,导入的包是否是正确的
3.2 权限控制
四.继承
4.1 是什么
从已有的类中派生出新的类,新的类会拥有父类的属性和行为.
4.2 做什么
目的: 代码复用,支持多态
4.3 怎么做
通过extends表示 class 类名 extends 父类名{}
public static void main(String[] args){ SubClass s = new SubClass)(); s.m1(); s.m2(); } class SupClass{ public void m1(){ System.out.println("父类m1"); } } class SubClass{ public void m2(){ System.out.println("子类m2"); } }
4.4 特点
1.java中只支持单继承 2.一个类可以被很多类继承 3.java中继承可以被传递 4.如果一个类没有显示继承另一个类的话,默认继承Object,Object是java提供的根类
五.super
5.1 是什么
在子类中,通过this表示当前对象,通过super表示父类
5.2 能做什么
1.用在成员方法和构造方法中,区分父子类同名的属性 2.用在构造方法中,用于重载调用父类的构造方法super(),必须写在子类构造方法第一行,而this() 也必须在构造方法第一行,所以this()和super()不能同时出现,如果子类构造方法中,没有写this(.….),也没有写super.(….),则第一行默认有super()去调用父类无参构造 3.this和super都不能在静态上下文中使用
5.3 怎么用
5.3.1 区分父子类同名属性
5.3.2 调用父类构造
子类创建对象,一定会执行父类构造方法
5.4 注意
this和super都不能在静态上下文中使用
而 this() 也必须在构造方法第一行,所以 this() 和 super() 不能同时出现
super不能打印,也不存储地址 子类在自己的内存空间中开辟一块区域存放父类
六.覆写Override
6.1 是什么
子类对父类方法进行重新编写
6.2 应用场景
当父类功能无法满足子类需求的时候,子类可以根据需求进行覆写.(拓展父类,但不能修改)
覆写条件:
1.必是须有继承关系的体系中
2.方法名,参数列表,返回值(返回值代表功能)必须一致
3.不能比原方法有更低的访问权限
4.不能比原方法有更宽泛的异常
5.方法覆写,特指成员方法(只有成员方法可以覆写)
6.3 @Override
表示是方法覆写,会在编译时进行检查是否符合覆写条件.
七.Final
7.1 是什么
final是一个修饰符,表示最终的,不可更改的.
7.2 做什么
final修饰的类 不能被继承. final修饰的成员方法,不能被覆写. final修饰的成员变量,没有默认值,必须显示赋值(不嫩有不赋值的情况),不能二次赋值. final修饰的静态变量,是常量,一般会和public一起使用.psf : public static final,并且常量名,一般全大写. final修饰的局部变量不能二次赋值.
7.3 怎么用
//静态变量 final static int a = 1; //成员变量 final int b; A(){ b = 3; }
7.4 深入final
final int a = 2; //不能二次赋值 // a = 3;(错误) final User u = new User("张三",18); // final修饰的引用类型, u的值不能修改,但是u指向的堆内存中的数据,可以修改/因为age又没有final修饰 u.age = 19; // u=null;