第二节——关键字学习(public,protected,private,this,super,final,static)

Posted 想学习安全的小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二节——关键字学习(public,protected,private,this,super,final,static)相关的知识,希望对你有一定的参考价值。

一、public,protected,private

1、作用权限
修饰词本类同一个包中的类子类不同包中的非子类
private×××
无(默认)××
protetcted×
public
2、同一包中的类的使用方式
//定义一个Test1类
public class Test1 {
    protected int id;
}
//定义一个Test2类,在Test2类里面使用Test1类的id
public class Test2 {
    Test1 test;
    public int qwe(){
        this.test.id=2;
        return 1;
    }
}

二、this,super

  1. this关键字:使用本类的成员变量或成员方法
  2. super关键字:实现对父类成员的访问,用来引用当前对象的父类
class Animal {
  void eat() {
    System.out.println("animal : eat");
  }
}
 
class Dog extends Animal {
  void eat() {
    System.out.println("dog : eat");
  }
  void eatTest() {
    this.eat();   // this 调用自己的方法
    super.eat();  // super 调用父类方法
  }
}

三、final

  1. 修饰基本数据类型,则该引用为常量,可以不用立即赋值,但赋值后不能被修改。
  2. 修饰引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
    eg:
final int[] arr = {1,2,3,4}; //arr只能指向数组[1,2,3,4]
final int[] arr = {1,3};     //此后让arr指向数组[1,3]会报错
  1. 修饰类的成员变量,则必须当场赋值,否则编译会报错。
  2. 当使用final修饰方法时,这个方法将成为最终方法,可以被继承,但不能被改写。
  3. 当用final修改类时,该类成为最终类,无法被继承。

四、static

  1. static修饰类:普通类不允许被static修饰,只有内部类才能被static修饰,被修饰的内部类在创建对象时,直接使用外部类类名创建,不用先创建外部类实例。
    eg:
//创建一个Test1类,在Test1类里面再声明一个Test2类
public class Test1 {
    public static class Test2{
        public static void qwe(){
            System.out.println("qwe");
        }
    }
}
// 创建Test2的实例
Test1.Test2 test = new Test1.Test2();

//如果Test2没有static修饰
public class Test1 {
    public class Test2{
        public void qwe(){
            System.out.println("qwe");
        }
    }
}
//创建Test2实例时,需要先创建Test1的实例(内部类的实例创建)
Test1.Test2 test2 = new Test1().new Test2();
  1. static修饰方法:同一类里面,直接通过方法名调用,不用this;不同类里,通过类名.方法名调用
    eg:
//同一类里直接通过方法名调用
public class Test1 {
    public static void qwe(){

    }
    public void asd(){
        qwe();
    }
}

//不同类里,通过类名.方法名调用
public class Main {
    public static void main(String[] args) {
        Test1.qwe();
    }
}
  1. static修饰变量:同一类里面,直接通过变量名调用,不用this;不同类里,通过类名.变量名调用
    eg:
//同一类里面,直接通过变量名调用
public class Test1 {
    static int a =10;
    public void asd(){
        System.out.println(a);
    }
}

//不同类里,通过类名.变量名调用
public class Main {
    public static void main(String[] args) {
        int b = Test1.a;
    }
}
  1. static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
  2. static修饰代码块:用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
    eg:
public class Test1 {
    static {
        System.out.println("qwe");
    }
}

以上是关于第二节——关键字学习(public,protected,private,this,super,final,static)的主要内容,如果未能解决你的问题,请参考以下文章

C#关键字详解第二节

oracle基础(第二节)

嵌入式Linux从入门到精通之第二节:语言基础

SQL.基础构建-第二节(2/4)

函数的第二节课,动态传参,动态关键字参数,作用域,关键字global和nonlocal

第二节——go基础