关于java:JAVABasis-42-面向对象

39次阅读

共计 2519 个字符,预计需要花费 7 分钟才能阅读完成。

1 static

1.1 概念

Java 中用于润饰常量,变量,办法的关键字,称为动态常量,动态变量,静态方法,它们都存在与办法区。

1.2 特点

① 这些变量和办法都有独立的生命周期,只须要加载一次,
② 内存中的动态变量能够被其余类类共享,其余类调用时无需实例化。
③ 动态只能调用动态,非动态能够随便调用。
④ static 不能和 this 和 super 共用,因为有 static 的时候还没有对象。

1.3 分类

1.3.1 动态常量

在 Java 语言中应用 final static 润饰的成员变量就是一个动态常量,动态常量也就是通常意义下的共享常量,一旦赋值实现就不能够进行更改了。

1.3.2 动态变量

在 Java 语言中应用 static 润饰的成员变量就是动态变量,能够被不同的类操作,属于类且存储与办法区中,只有一份通过类名进行拜访。

1.3.3 静态方法

想要应用类中成员办法,须要先将这个类进行实例化,然而有些时候无奈或者不想创立类的对象时,咱们还要调 用类中的办法供咱们实现业务逻辑代码,此时咱们就能够通过静态方法 —> 调用静态方法,无需创立类的对象

1.3.4 动态代码块

在类中成员办法之外,应用 static 润饰的代码区域能够称之为动态代码块,定义了一个动态代码块,能够实现类的初始化操作 属于类的,在类被加载期间主动执行。

1.4 案例

package com.mtingcat.javabasis.object.sc;

import java.util.Date;

/**
 * 这个类用来测试动态成员
 * @author MTing
 *
 */
public class student {
    final static int A = 123; // 动态常量
    static String Hello = "Hello";  // 动态变量
    static {        // 动态代码块
        @SuppressWarnings("unused")
        String Today = "Today";
        System.out.println(new Date());
    }
    public static void main(String[] args) {@SuppressWarnings("unused")
        String sex = Person.sex1;  // 动态变量能够不同创立实例对象就能够调用
        Hello = "Hello===";        // 动态变量的值能够更改
        System.out.println(A+","+Hello);
        Person p = new Person("Cat", 22);
        
    }

}
class Person{
    String name;
    int age;
    static String sex1 = "男";
    static String sex2 = "女";
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void study(){System.out.println("not static");
    }
    public static void sleep(){System.out.println("staic sleep()=====");
    }
}

1.5 静态方法内存图

1.6 拓展

1.6.1 动态代码块,结构代码块,部分代码块概念

① 动态代码块:在类加载的时候就被加载,只能被加载一次,个别用于我的项目的初始化。
② 结构代码块:在调用构造方法前会主动调用,每次创建对象的时候会被调用。
③ 部分代码块:办法里的代码块,办法被调用的时候才会被执行。

1.6.1.2 案例

package com.mtingcat.javabasis.object.sc;

public class Test {public static void main(String[] args) {Bird bird = new Bird();
        bird.eat();}

}

class Bird{
    int id;
    String name;
     // 动态代码块
    //1,在类第一次加载时就加载到内存中并始终驻存,// 并全局共享, 直到类隐没动态资源才隐没
    //2,并且动态资源只被加载一次
    static{System.out.println("动态代码块");
    }
    
    // 结构代码块
    public Bird(){System.out.println("无参结构");
    }
    public Bird(int id){
        this.id = id;
        System.out.println("这是有参构造方法");
    }
    public Bird(int id,String name){
        this.id = id;
        this.name = name;
        System.out.println("这是全参构造方法");
    }
    // 部分代码块
    public void eat(){System.out.println("这是部分代码块");
    }
}

1.6.2 final

final 即最终的,能够润饰类,办法和变量,java 呈现了继承后,子类能够更改父类的性能,当父类性能不许子类扭转时能够利用 final 关键字润饰父类。

1.6.2.1 特点

① 被 final 润饰的类,不能被继承
② 被 final 润饰的办法,不能被重写
③ 被 final 润饰的变量是个常量,值不能被更改
④ 常量的定义模式:final 数据类型 常量名 = 值

1.6.2.2 案例

package com.mtingcat.javabasis.object.sc;

public class test02 {public static void main(String[] args) {Chevrolet c = new Chevrolet();
        c.go();
        System.out.println(c.name);
        c.go00();}
    
}
class Car{//final class A{}// 被 final 润饰的类不能被继承
    final String name = "大黄蜂";
    public final void go(){System.out.println("gogogo");
    }
}

class Chevrolet extends Car{
    // 被 final 润饰的办法不能被重写
    /*public void go(){}*/
    public void go00(){
    /*    super.name="擎天柱";*/// 被 final 的变量,不能从新被赋值
        System.out.println(super.name);
    }
}

正文完
 0