栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习笔记——修饰符

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习笔记——修饰符

目录

一、访问修饰符

二、非访问修饰符

Java的修饰符分为两大类:访问修饰符、非访问修饰符

一、访问修饰符

1、default:默认访问权限;只对同一个包可见(同包、同类);

2、private:私有访问;只对同一个类可见(同类);

3、public:共有访问;对所有的类可见(同包、同类、子类、其他包);

4、protected:保护性访问;对同一个包可见(同包、同类、子类);

二、非访问修饰符

1、static:创建类方法和类变量;

a.static 成员变量

  • static成员变量 = static + 成员变量,static成员变量也称为静态变量
  • 静态变量可通过“类名.静态成员变量” 或者 “对象名.静态变量名”
// 静态成员变量
    static String name;
    static float height;

 b.static 成员方法

  • static成员方法 = static + 成员方法,static成员方法也称为静态方法
  • 静态成员方法不能使用this、super关键字
  • 静态方法不能调用非静态方法,不能引用非静态变量
// 静态成员方法
    public static float getHeight(){
        return Student.height;
    }

 c.static 代码块

  • static代码块又称为静态代码块,或静态初始化器。
  • static 代码块不需要程序主动调用,在JVM加载类时系统会执行 static 代码块,因此在static 代码块中可以做一些类成员变量的初始化工作。
  • 如果一个类中有多个 static 代码块,JVM将会按顺序依次执行。需要注意的是,所有的static 代码块只能在JVM加载类时被执行一次。
  // static代码块
    static {
        Student.name = "Jack";
        Student.height = 181;
        System.out.println("static1");
    }

 d.static 内部类

  • static内部类 = static + 内部类,称为静态内部类
  • 静态成员内部类不依赖外部类实例而被实例化
  • 静态内部类不能访问其外部类的实例成员(包括普通的成员变量和方法),只能访问外部类的类成员(包括静态成员变量和静态方法)
// 静态成员方法
    static class Day2{
        public Day2(){
            System.out.println("Day2!");
        }
    }

代码实例 

package Java_learning;

public class Student {
    // 静态成员变量
    static String name;
    static float height;

    // 静态成员方法
    public static float getHeight(){
        return Student.height;
    }

    // static代码块
    static {
        Student.name = "Jack";
        Student.height = 181;
        System.out.println("static1");
    }

    static {
        System.out.println("static2");
    }

    // 静态成员方法
    static class Day2{
        public Day2(){
            System.out.println("Day2!");
        }
    }

    public static void main(String[] args){
        Student s = new Student();
        System.out.println(s.getHeight());

        Day2 b = new Day2();
        System.out.println(Student.name);
    }
}

 输出结果

 注意:首先输出的是"static1"和"static2",说明static 代码块不需要程序主动调用,在JVM加载类时系统会执行 static 代码块,并且JVM将会按顺序依次执行。

 2、final:修饰类、方法和变量;final类不可被继承;final修饰的方法不可被继承类重新定义;final修饰的变量为常量,不可修改。

a.final修饰局部变量

  • final修饰的局部变量,初始化后不能再修改。
  • 若final修饰的是基本数据类型,则该变量的值不可修改;
  • 若final修饰的是引用数据类型,则该变量可修改值,但地址不可修改。

代码实例1

// 未经过final修饰的局部变量
int a = 1;
System.out.println("a:" + a);
a = 2;
System.out.println("修改后的a:" + a);

 输出结果1

代码实例2

// final修饰局部变量
final int b = 10;
System.out.println("b:" + b);
b = 2;

输出结果2

ps:未经过final修饰的成员变量a是可以进行修改的,而经过final修饰的变量b是不可以进行修改的。

代码实例3

public class Student {
    private String name;

    public Student(){

    }

    public Student(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }

    public static void main(String[] args){
        Student person1 = new Student("Jack");
        System.out.println(person1); // 地址
        System.out.println("person1's name:" + person1.getName());

        person1 = new Student("Marry");
        System.out.println(person1); // 地址
        System.out.println("person1's name:" + person1.getName());
    }
}

输出结果3

 ps:两次的地址不同。

 代码实例4

final Student person2 = new Student("Tom");
System.out.println(person2); // 地址
System.out.println("person2's name:" + person2.getName());

// person2 = new Student("Jerry"); // 会报错!
person2.setName("Jerry");
System.out.println(person2); // 地址
System.out.println("person2's name:" + person2.getName());

输出结果4 

 ps:对于引用数据类型来说,变量中的地址不可修改,但是数据值可以修改。 

b.final修饰成员变量

  • final修饰的成员变量,值也不可被修改;
  • final修饰的成员变量必须手动赋值,无默认值;

--直接赋值

private final String name = "Jack";

 --构造方法中赋值 

private final String name;

public Student(){
      this.name = "Jack";
  }

 c.final修饰方法

  • final修饰的方法,不可被重写。

d.final修饰类

  • final修饰类,表示最终类,不能被继承,不能成为父类。

3、abstract:创建抽象类和抽象方法。

a.abstract修饰类

  • abstract修饰的类称为抽象类;
  • 抽象类不可被实例化,也就是不可创建对象;
  • 抽象类必须有构造器;
  • 抽象类一般位于体系结构的上层,定义功能。
  • 若一个类继承了抽象类,那么该类智能重写抽象类中的所有抽象方法,或该类抽象化;

b.abstract修饰方法

  • abstract修饰的方法称为抽象方法;
  • 抽象方法的类一定是一个抽象类;

abstract不可修饰属性、方法;

abstract不可修饰:私有方法(final修饰的方法)、静态方法(static修饰的方法)

4、synchronized:用于多线程的同步。

5、volatile:修饰的变量被线程访问时,会强制从共享内存中重新读取;若修饰的成员变量发生变化时,会强制线程将变化值回写到共享内存。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/848274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号