尚硅谷 java 学习Day18 面向对象(下)

6-1 关键字 :static


static 关键字的使用:

1、static:静态的

2、static 可以用来修饰:属性、方法、代码块、内部类

3、使用 static 来修饰属性: 静态变量

​ 3.1属性: 按是否使用 static 又分为静态属性和非静态属性(实例变量)

​ 实例变量: 我们创建了类的多个对象,每个对象独立拥有一套类中的实例变量(非静态属性)

​ 静态变量:类的多个对象共享同一个 静态变量; 意味着:修改某一个对象的静态变量后,其他对象调用也都是修改后的

​ 3.2 static 修饰属性的其他说明:

​ 1、静态变量随着类的加载而加载;可以通过“类.静态变量”的方式进行调用

​ 2、静态变量的加载早于对象的创建

​ 3、由于类只会加载一次,则静态变量在内存中也只会存一份;存在方法区的静态域中

​ 4、 类变量 实例变量

​ 类 yeah no

​ 对象 yeah yeah

​ 3.3 静态属性举例: System.out; Math.PI;

4、使用 static 来修饰方法:静态方法

​ a.随着类的加载而加载,可以通过“类.静态方法”的方式进行调用

​ b. 静态方法 非静态方法

​ 类 yeah no

​ 对象 yeah yeah

​ c.静态方法中只能调用静态的方法或属性

​ 非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性

5、static 注意点:

​ 5.1 在静态的方法内,不能使用 this 关键字、super 关键字

​ 5.2 关于静态属性和静态方法的使用,我们都应该从生命周期的角度去理解

6、开发中,如何确定一个属性是否要声明为 static 的

​ >属性是可以被 多个对象所 共享的,不会随着对象的不同而不同的

​ >类中常量也常常声明为 static

开发中,如何确定一个方法是否要声明为 static 的

​ >操作静态属性的方法 通常设置为静态的 (static)

​ >工具类中的方法 习惯上 声明为静态方法 (static)

单例设计模式:采用一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且只提供一个取得其对象实例的方法

单例模式的 实现 方式:

一、饿汉式 (上来就创建好类的对象)

public class SingletonTest {
    public static void main(String[] args) {
        Bank bank1=Bank.getInstance();
        Bank bank2=Bank.getInstance();
        System.out.println(bank1==bank2); //证明这两个 bank为同一个对象

    }
}
//饿汉式
class Bank{

    //1、私有化类的构造器
    private Bank(){

    }
    //2、内部创建类的对象
    //4、要求此对象也必须声明为静态的
    private static  Bank instance= new Bank();

    //3、提供公共的静态的方法,返回类的对象
    public static Bank getInstance(){
        return instance;
    }

}

二、懒汉式(类的对象用的时候再造)

package com.jackson.java2;

public class SingletonTest2 {
    public static void main(String[] args) {
        Order order1=Order.getInstance();
        Order order2=Order.getInstance();
        System.out.println(order1==order2); //证明两个为同一个对象
    }


}
//懒汉式
class Order{
    //1、私有化类的构造器
    private Order(){

    }

    //2、声明当前类对象,没有初始化
    //4、此对象也必须声明为 static
    private static  Order instance=null;
    //3、声明 public 的 static 的返回当前类对象的方法
    public static Order getInstance(){
        if(instance==null){ //只创建一个对象
            instance=new Order();
        }
        return instance;
    }


}

三、区分饿汉式和 懒汉式

饿汉式:

​ 坏处:对象加载时间过长

​ 好处:饿汉式式线程安全的

懒汉式:

​ 好处:延迟对象的创建

​ 坏处:目前的写法的坏处:线程不安全----->到多线程内容的时候,再修改



6-2 Main () 方法的理解


main()方法的使用说明:

​ 1、main()方法作为程序的入口

​ 2、main()方法也是一个普通的静态方法

​ 3、main()方法也可以 作为我们与控制台交互的方式



6-3 类的成员之四: 代码块 (或初始化块)


一、代码块作用:用来初始化类、对象

二、代码块如果有修饰的话,只能用 static

三、分类: 静态代码块 vs 非静态代码块

​ 静态代码块

​ >内部可以有输出语句

​ >随着类的加载而执行,并且只执行一次

​ >作用:初始化类的一些信息

​ >如果一个类中定义了多个静态代码块,,则按声明的先后顺序执行

​ >静态代码块的执行要有优先于非静态代码块的执行

​ >静态代码块内只能调用静态的属性或方法,不能调用非静态的结构

​ 非静态代码块

​ >内部可以有输出语句

​ >随着对象的创建而执行

​ >每创建一个对象,就执行一次非静态代码块

​ >作用:可以在创建对象时,对对象的属性等进行初始化

​ >非静态代码块可以调用静态的与非静态的结构

总结:由父及子,静态先行

对属性可以赋值的位置:

a.默认初始化

b.显式初始化

c.构造器中初始化

d.有了对象以后,可以通过“对象.属性”或者“对象.方法”的方式,进行赋值

e.在代码块中赋值

执行的先后顺序:a-b/e(这俩得看谁先写了 谁先执行)-c-d



6-4 关键字: final


final:最终的

1、final 可以用来修饰的结构:类、方法、变量

2、final 用来修饰一个类: 此类不能被其他类所继承(通俗一点的话:绝育了,没子类)

​ 比如:String 类、System 类、StringBuffer 类等

3、final 修饰一个方法: 方法不能被重写了

4、final 用来修饰变量: 此时的变量就称为“常量”

​ 4.1、final 修饰属性:可以考虑赋值的位置有:显式初始化、代码块中赋值(初始化)、构造器中初始化

​ 4.2、final 修饰局部变量:尤其是 final 用来修饰行参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参,一旦赋值之后,只能在方法体内使用此形参,不能进行重新赋值

static final :用来修饰属性全局常量


总结
最近摆了很多天,作息有点日夜颠倒,浪费了大量时间,同时也落下来了大量的工作量,最近一周得要好好努力!!!
今日鸡汤
用每天的小小胜利,来为更大的胜利铺路
共勉!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值