java - 基础 - 修饰符
种类:
权限修饰符:
public 公共的 本类 同包 子类继承后可以通过子类对象在子类内部中使用 任意位置只要有这个class的对象都可以使用
基本范围无限制
protected 受保护的 本类 同包 子类继承后可以通过子类对象在子类内部中使用
在本类中使用 或者 相同package的class中声明使用 或者 在不同包的子类中通过自身实例对象使用(person是animal的不同包中的子类,person中声明person对象可以使用animal中的protected属性参数和方法,但是在person中声明animal对象,不能使用animal的protected属性的参数和方法)。
默认不写 默认的 本类 同包
在本类中 或者 相同package的class中声明使用。 (class animal 在 A 包, class person在 A 包里面的 B 包也算不同包 )
private 私有的 本类
只能在本类中使用
使用private等给与权限限制,是为了防止直接操作或者误操作,降低耦合性,添加校验等。所以属性一般设为private。
java对象的特征:继承(extends),封装(将数据方法包装,保护安全性和程序健壮性),多态,(抽象)
spring: IOC(控制权反转,控制权交给别人) DI(依赖注入)
特征修饰符:
final 最终的,不可改变的
static 静态的
abstract 抽象的
native 本地的
transient 瞬时的 -----》序列化
synchronized 线程并发使用
volatile 线程并发使用
final 最终的,不可改变的
修饰: 变量,属性,方法,类
final修饰变量后一旦存入值则不能修改,相当于常量。
变量为基本类型,则值不让修改
变量为引用类型,则地址不让修改
属性加上final后必须赋予默认值。
方法加上final后不能被子类重写覆盖。
类加上final后不能被继承修改(一般用于修饰工具类)Math,String,Scanner等
基本类型变量不能直接修改值
引用类型变量不能修改指向地址,str申请了一个新的地址,想赋给fs失败了
修改引用变量内的值成功。
static 静态的
修饰: 属性,方法,块,内部类
静态元素存在方法区的静态元素区,同一个类的所有实例的static变量都存在同一个内存中,他们操作的是同一个内存值。
静态元素(块和方法等)在类加载时就初始化了,只加载一次。块和构造方法在创建实例时才运行。
package xiushifu; public class StaticTest { public String name; public static int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public static int getAge() { return age; } public static void setAge(int age) { StaticTest.age = age; //自动生成的static变量的set方法 } public void show(){ System.out.println("name = " + this.name + " age = " + this.age); } public static void main(String[] args){ StaticTest st1 = new StaticTest(); st1.name = "aaa"; st1.age = 10; st1.show(); StaticTest st2 = new StaticTest(); st2.name = "bbb"; st2.age = 20;//给st2的age赋值,st1的age也一起被修改了。 st1.show(); st2.show(); } }
常用方法: static final 变量 = 。。。 作为常量使用在增加代码可读性。
abstract 抽象的
只是概念,没有具体执行
可以用来修饰:方法,类。
抽象方法: 用abstract修饰,只有结构,没有执行体。 public abstract void aaa();
抽象方法必须放在抽象类 或者 接口中。
抽象类中不是必须有抽象方法,不过一般都会有。
抽象类:
可以包含abstract方法。
包含构造方法,但是不能调用。用来给子类继承。
抽象类:
可以只接单继承抽象类
可以只接单继承普通类(一般不会这么干)
不可以直接被子类继承(子类需要具体化抽象类中的方法)
可以完全没有抽象方法
可以完全没有具体方法 --- 接口interface
native 本地的
执行的是底层其他语言的代码。
transient 瞬时的 -----》序列化
synchronized 线程并发使用,同时只能有一个执行
volatile 线程并发使用