this关键字
this.代表当前类对象的地址值引用,
目的:为了防止局部变量隐藏成员变量
class A{
String name
public void test(String name){
this.name = name;
}
}
this 的用方法
this.变量名;访问本类中的成员变量
this.方法名();访问本类中的成员方法
匿名对象
格式:
new ()一般只可以用一次;直接在栈内存开辟空间,使用完毕就要被回收,可以节省内存.
匿名对象可以作为参数传递:格式 类名.(new ());
构造方法
方法名和类名相同,没有具体返回值;连viod都没有.
public 方法名与类名相同(){
}
public 方法名与类名相同(参数类型1 参数名1,参数类型2 参数类型2.....){
}1.
目的:为了给类的成员初始化
Student s = new Student();
1.栈内开辟空间
2.堆内申请空间
3.为成员变量进行系统默认初始化
4.
注意事项:
1.标准类中会系统会默认提供一个无参构造方法
2.如果提供了一个有参构造方法,系统既不会默认提供无参构造方法,建议永远给出无参构造方法
3.方法构造是可以重载的
一个类包括成员变量,成员方法,构造方法
一个方法的形式参数如果是引用类型,实际参数要传递当前类的具体对象
什么是标准类,标准类包括什么
- 成员方法私有化
- 无参构造永远给出,有参构造根据实际情况
- 成员方法
代码块
代码块就是用{}括起来的内容
分类
局部代码块:在方法的定义中使用{}
{}的作用是限定局部变量的生命周期
构造代码块:在类的成员位置定义的{},在执行构造方法之前,如果类中有构造代码块,优先执行构造代码块,作用:也可以给类的成员进行初始化
静态代码块:
类只加载一次,静态代码块也只执行一次
格式:
static {}
class test{ { System.out.println("B");//2 } static{ System.out.println("A"); //1 } public test { System.out.println("C");//3 } }
优先级:静态代码块>构造代码块>构造方法
static关键字
static特点:
1)被static修饰的随着类的加载而加载,优先于对象存在
2)不能和this共存
3)本身含义就是共享,公用,可以多个对象共享公用
4)被静态修饰的成员方法或者成员方法(静态变量/静态方法)
class Demo{
int a = 10;
static int b = 30;
public void test(){
System.out.println(a);
System.out.println(b);
}
public static test1(){
test();//报错,静态方法只能访问静态方法,test是非静态
Ssystem.out.println(b);
Ssystem.out.println(a);//a是非静态的
}
}
访问的方式:
可以使用对象名来访问
jvm直接类名访问 类名.变量名
类名.方法名()
静态只能访问静态,静态不能访问非静态,非静态可以访问静态
继承
继承是将多个类中的共性内容提取出来,放在一个独立的类中,让这个独立的类和其他的类产生关系
extends
格式:
class 父类名{
共性内容代码
提供setXXX/getXXX
}
class 子类名 extends 父类名{}
继承的好处:
- 可以提高代码的复用性
- 可以提高代码的维护性,方便有继承关系代码的维护
- 类与类产生继承关系,是多态的条件
继承的特点:只支持单继承,不支持多继承,支持多层继承.
注意事项:
1)子类在继承父类时,对于非私有的成员,直接继承;对于私有成员,可以通过公共的方法间接访问
2)被私有方法修饰的东西(成员变量/成员方法)只能在本类中访问
继承中的构造方法
子类继承父类,子类中的所有构造方法都默认访问父类的无参构造
父类中存在有参构造方法,没有无参构造方法,子类的所有构造方法全部出错
super和this
super()访问父类的无参构造方法
super(xxx)访问父类的有参构造方法
super一定是子类构造方法中的第一句话
子类继承父类,一定要先执行父类的构造方法,初始化完毕之后,才能执行子类的构造方法
class A {
void A() {
System.out.println("一");
}
public int A(int a) {
int result = a;
System.out.println(result);
return result;
}
}
class B extends A {
public void A() {
System.out.println("2");
}
public int A(int a) {
int result = a;
System.out.println(result);
return result;
}
}
class test {
public static void main(String[] args) {
B b = new B();
b.A();
}
}
继承中成员变量关系
子类和父类的成员变量名称不一致,访问简单
子类和父类的成员变量一致
- 现在子类的局部位置找,是否存在,存在就是使用
- 子类的局部位置没有,在子类的成员位置找,是否存在,存在就说那个
- 如果子类的成员位置没有,然后在父类的成员位置找,是否存在,存在就使用
- 如果父类的成员位置也没有(父类没有它的父类,就报错,整个类中没有变量)
继承关系中成员方法的访问
子类继承父类,成员方法(公共方法)名称不一致,分别调用即可
如果成员方法名一样,系统认为子类要重写父类的方法,必须保证,子类的方法和父类一模一样,子类将父类的方法覆盖,方法重写,访问子类的功能
final关键字
含义:final表示最终的,无法更改的,状态修饰符
final 修饰类,该类不能被继承
finla 修饰变量,此时的变量是一个常量
多态
多态的前提条件
- 必须有继承关系
- 必须存在方法重写
- 父类引用指向子类对象 Fu fu = new Zi(); 向上转型
多态的成员访问特点
1)成员变量,编译看左,运行看左
2)成员方法:编译看左,运行看右,存在方法重写
3)静态的方法:编译看做,运行看左
4)构造方法:分层初始化,先执行父类初始化,在执行子类初始化
多态的弊端:
不能访问子类的特有功能,解决方法:创建具体的子类对象
Zi zi = new Zi(); 需要重新开辟内存空间,消耗内存资源
向下转型(强制转型)
Zi z = (Zi) fu 不需要单独去开辟内存空间
抽象类
有个没有方法体的方法被称为抽象方法,类中如果有抽象方法,类必须是抽象类
格式
abstract class 类名{}
public abstract void 方法名(){
}
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
抽象类不能实例化,可以通过子类实例化
抽象类的成员特点:
成员变量:
可以是变量,可以使常量
构造方法
有构造方法,但是不能实例化
成员方法
可以有抽象类,限定子类必须完成某些动作
也可以有抽象方法,提高代码的复用性
抽象类的子类必须重写父类所有方法,否则要将子类定为抽象类,失去意义
抽象类abstract跟private final static冲突,不能同时出现
接口
接口是为了给某些class类提供额外的扩展功能,接口是比抽象类还抽象的,接口中的方法也是抽象方法,在实现接口的类中要重写接口中的方法.跟抽象类一样,接口不能实例化,只能通过子类实现
格式
interface 接口名{
public abstract void 方法名();
}
接口实现格式
class 类名 implements 接口名{
}