java学习day010

面向对象

一.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;

  • 30
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值