其他分享
首页 > 其他分享> > day15_构造器丶final关键字丶static关键字

day15_构造器丶final关键字丶static关键字

作者:互联网

构造器(Constructor)

我们发现我们new完对象时,所有成员变量都是默认值,如果我们需要赋别的值,需要挨个为它们再赋值,太麻烦了。我们能不能在new对象时,直接为当前对象的某个或所有成员变量直接赋值呢。可以,Java给我们提供了构造器。

构造器概述

构造方法的定义格式:

如何调用构造器

代码示例:

public class Student {
    private String name;
    private int age;
    // 无参构造
      public Student() {} 
     // 有参构造
      public Student(String name,int age) {
        this.name = name;
        this.age = age; 
    }
      
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

注意事项:

final关键字

概述:final表示 不可改变。可以用于修饰类、方法和变量。

修饰类

表示这个类不能被继承,没有子类。查询API发现像 public final class Stringpublic final class Mathpublic final class Scanner 等,很多我们学习过的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容。

 ​

代码示例

final class Fu {

}

class Zi extends Fu { //错误:Fu类被final修饰了,所以不能被继承
    
}​

修饰方法

表示这个方法不能被子类重写,重写被 final修饰的方法,编译时就会报错。

​​

 代码示例

class Fu {
    public final void show() {

    }
}

class Zi extends Fu {

    /*
    @Override
    无法重写父类中的show方法,因为父类中的show方法被final修饰了
    public void show() {
    }
    */

}

修饰变量

final修饰某个变量(成员变量或局部变量),表示它的值就不能被修改,即常量,常量名建议使用大写字母。

基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改。代码如下

public class FinalDemo1 {
    public static void main(String[] args) {
         // final修饰基本数据类型
        final int NUM = 10;
        // NUM = 20;// 编译报错,final修饰的变量只能赋值一次,不能重复赋值
    }
}

引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成员变量值的修改,代码如下

public class FinalDemo2 {
    public static void main(String[] args) {
        // 引用类型
        final Student stu = new Student("张三",18);
        //stu = new Student("李四",19);// 编译报错
        stu.setAge(19);
    }
}

成员变量,被final修饰后。涉及到初始化的问题,初始化方式有两种,只能二选一:

显示初始化

public class FinalVariable {
    //推荐
    final int NUM1 = 10;
}

构造方法初始化,必须保证每个构造方法都能给其变量赋值。

public class FinalVariable {
    final int NUM2;
    public FinalVariable(int NUM2){
        this.NUM2 = NUM2;
    }
    public FinalVariable(){
        this.NUM2 = 10;
    }
}

​static关键字

概述:

static是一个静态修饰符关键字,表示静态的意思,可以修饰成员变量和成员方法以及代码块,成员内部类。static不能修饰top-level的类。static修饰类成员内部类,简称静态内部类,不需要外部类实例对象就可以使用的内部类,在静态内部类中只能使用外部类的静态成员。

static修饰成员变量

当 static 修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。

​编辑

代码示例

class Person {
    // 非静态变量
    String name;// 姓名
    // 静态变量
    static String country;// 国籍

    // 构造方法

    public Person() {
    }

    public Person(String name, String country) {
        this.name = name;
        this.country = country;
    }
}

public class Test {
    public static void main(String[] args) {
        // 创建Person对象
        Person p1 = new Person("张三", "中国");
        System.out.println(p1.name+","+p1.country);// 张三,中国

        System.out.println("=======================");

        // 创建Person对象
        Person p2 = new Person();

        // 没有使用static修饰name
        // 使用static修饰country
        System.out.println(p2.name+","+p2.country);// null,中国
        
        //推荐使用此方式,访问类变量
        System.out.println(Person.country);// 中国
    }
}

图解分析:

​​

static修饰成员方法

被static修饰的方法会变成静态方法,也称为类方法,该静态方法可以使用类名直接调用。以后的项目中,通常会需要一些“全局变量”或者“全局的工具方法”,这些全局变量和方法,可以单独定义在一个类中,并声明为static(静态)的,可以很方便的通过类名访问


代码示例

package demo11;

class Person {
    // 非静态方法
    public void method1(){
        System.out.println("Person method1...");
    }

    // 静态方法
    public static void method2(){
        System.out.println("Person method2...");
    }
}
public class Test {
    public static void main(String[] args) {
        Person p = new Person();
        //不推荐
        p.method2();

        // 类名.静态成员方法名(实参);
        Person.method2();

    }
}

因为被static修饰的方法,随着类的加载而加载,并且早于对象的创建,故此有下面这些注意事项。

static修饰代码块,代码块,我们称为静态代码块,或静态初始化块,用于为静态变量初始化,每一个类的静态代码块只会执行一次,在类第一次初始化时执行。以后等到代码块在细说

 

标签:变量,day15,class,public,关键字,static,修饰,final
来源: https://www.cnblogs.com/wurengen/p/16423417.html