昨天晚上有事,所以没有更新,今天来补充。
目前仍在学习面向对象这一整块的东西,基础不牢,地动山摇。后期的学习和开发都是建立在充分理解面向对象这一核心的基础上的,作为初学者的我,更是要多看多学才行。
Java语言提供了很多修饰符,主要分为以下两类:
访问修饰符;
非访问修饰符。
修饰符用来定义类,方法或变量,通常放在语句的最前端。
一、访问修饰符:
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
protected 可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外)。
访问控制和继承
请注意以下方法继承的规则:
-
父类中声明为 public 的方法在子类中也必须为 public。
-
父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
-
父类中声明为 private 的方法,不能够被继承。
二、非访问修饰符
static:修饰符,用来修饰类方法和类变量。
final:修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract:修饰符,用来创建抽象类和抽象方法。
synchronized 和 volatile 修饰符,主要用于线程的编程。
Static修饰符:
在前期的学习中,经常见到这个东西:
public static void main(String[] args) {
……
}
我们知道,这句话是主方法,以下内容是其组成。
[访问修饰符] static 返回值数据类型 方法名([数据类型,变量名,……]){
……
}
static修饰的内容,会先载入方法区,被堆中的内容共享。
先于对象存在,被所有对象共享。
package day06;
public class Test {
int id;
static int sid;
public static void main(String[] args) {
Test t1=new Test();
Test t2=new Test();
Test t3=new Test();
t1.id=10;
t1.sid=10;
t2.id=20;
t2.sid=20;
t3.id=30;
t3.sid=30;
System.out.println(t1.id);
System.out.println(t2.id);
System.out.println(t3.id);
System.out.println("-------");
System.out.println(t1.sid);
System.out.println(t2.sid);
System.out.println(t3.sid);
}
}
结果:
可以发现这个例子中,static修饰的sid变量在最后输出时只输出了最后一次赋给它的值。
static的方法中只能访问静态变量,出现static就去找static修饰的东西就行。
下面这段代码,在eat方法输出id内容时会报错,但sid就不会。就是因为static先于对象存在。
package xiaobai;
public class Test {
int id;
static int sid;
public void sleep() {
System.out.println(id);
System.out.println(sid);
}
public static void eat() {
System.out.println(id);
System.out.println(sid);
}
对于不常用的内容,用static修饰会比较占用空间。
static的调用:
1.对象名. 属性名;System.out.println(t1.sid);
2.类名. 属性名;——推荐
Test.sid=90;
System.out.println(Test.sid);
static修饰方法的调用:
1.对象名。方法名
2.类名。方法名
main方法和static修饰的方法在同一个类中的时候,可以直接调用。
static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
final 修饰符
final 变量:
final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。
final 修饰符通常和 static 修饰符一起使用来创建类常量。
package day06;
public class Test {
final int value=1;
//final 修饰符通常和 static 修饰符一起使用来创建类常量。
//创建举例
public static final int Width=72;
static final String TrackGauge="1435mm";
public void changeValue() {
//此时会报错
value=12;
}
}
报错截图:
其他几个修饰符涉及到抽象和线程,暂时还没有学习到那个地方,所以先不做笔记了。