第二节——关键字学习(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
- this关键字:使用本类的成员变量或成员方法
- 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
- 修饰基本数据类型,则该引用为常量,可以不用立即赋值,但赋值后不能被修改。
- 修饰引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
eg:
final int[] arr = {1,2,3,4}; //arr只能指向数组[1,2,3,4]
final int[] arr = {1,3}; //此后让arr指向数组[1,3]会报错
- 修饰类的成员变量,则必须当场赋值,否则编译会报错。
- 当使用final修饰方法时,这个方法将成为最终方法,可以被继承,但不能被改写。
- 当用final修改类时,该类成为最终类,无法被继承。
四、static
- 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();
- 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();
}
}
- 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;
}
}
- static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
- static修饰代码块:用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
eg:
public class Test1 {
static {
System.out.println("qwe");
}
}
以上是关于第二节——关键字学习(public,protected,private,this,super,final,static)的主要内容,如果未能解决你的问题,请参考以下文章