整理链接
访问控制修饰符
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 | 中文 | 发音 |
---|---|---|---|---|---|---|---|
public | Yes | Yes | Yes | Yes | Yes | 公有的 | 怕 不 来克 |
protected | Yes | Yes | Yes | Yes/No (*) | No | 受保护的 | 普若 胎克 戴特 |
default | Yes | Yes | Yes | No | No | 默认 | 滴 F奥 特 |
private | Yes | No | No | No | No | 私有的 | 普r 外 特 |
虽然 default 是默认的意思,但是不写任何访问控制修饰符的话,默认是 public 。
非访问修饰符
-
static 静态修饰符,包含:
静态变量 (又名类变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 通常与 final 一起使用。)、
静态方法 (声明独立于对象的静态方法,静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。)。 -
final 常量修饰符,包含:
常量 (必须设置初始值,并且不能修改)、
常量类 (不能被继承)、
常量方法 (可以被子类继承,但是不能被子类重写,主要目的是防止该方法的内容被修改)。 -
abstract 抽象修饰符,包含:
抽象类:
・抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
・如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
・一个类不能同时被 abstract 和 final 修饰。
・抽象类可以包含抽象方法和非抽象方法。
抽象方法:
・抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
・抽象方法不能被声明成 final 和 static。
・任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
・如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
・抽象方法的声明以分号结尾,例如:public abstract sample(); 。
・例子:
public abstract class SuperClass{
abstract void m(); // 抽象方法
}
class SubClass extends SuperClass{
//实现抽象方法
void m(){
...
}
}
- synchronized 同步修饰符
同步方法:
・声明的同步方法同一时间只能被一个线程访问。
・synchronized 修饰符可以应用于四个访问修饰符。
・例子:
public synchronized void showDetails(){
...
}
- transient 短暂修饰符 [发音: 春 神 特]
短暂的变量:
・序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
・该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
・我理解的意思,大概就是只能在内存时有值,保存到文件、数据库或者网络传输时,需要序列化对象。这时就清除了。
所以再反序列化之后也没有值。应用场景比如密码相关。
・参考文章:
transient的作用及使用方法
Java序列化(持久化)
・例子:
public transient int limit = 55; // 不可以序列化(持久化)
public int b; // 可以序列化(持久化)
- volatile 挥发性的修饰符 [发音: 哇 来 泰奥]
挥发性的变量:
・修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。
而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。
这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
・一个 volatile 对象引用可能是 null。
・例子:
public class MyRunnable implements Runnable
{
private volatile boolean active;
public void run()
{
active = true;
while (active) // 第一行
{
// 代码
}
}
public void stop()
{
active = false; // 第二行
}
}
/*
通常情况下,在一个线程调用 run() 方法(在 Runnable 开启的线程),在另一个线程调用 stop() 方法。
如果 第一行 中缓冲区的 active 值被使用,那么在 第二行 的 active 值为 false 时循环不会停止。
但是以上代码中我们使用了 volatile 修饰 active,所以该循环会停止。
*/
注释格式
/**
* 注释内容
* 可以用HTML标签 <p> 或 <br> 来换行
* @author: 作者
* @description: 描述
* @date: 2021/6/6 11:06
* @param id 参数
* @return 返回
*/
void demo(int id) throws Exception;
/**
* {@inheritDoc}
*/
@Override
public void demo(int id) throws Exception {
// 覆写方法直接引用注释
}
======== 以下未整理 ========
/**
* 一般
*/
public class General extends CommonBatch {
/** String */
private String str = "";
/**
* xxxxx
* <p>
* xxx
*
* @param args 参数
* [0]:ID
* [1]:Name
*/
public static void main(String[] args) {
start(new JUBatch(Integer.parseInt(args[0]), args[1]));
}
/**
* 构成方法
* <p>
* 执行参数设定
*
* @param id ID
* @param name 姓名
*/
public JUBatch(int id, String name) {
super(id, name);
}
/**
* 业务逻辑
* <p>
*
* @throws Exception 例外
*/
protected void executeImpl() throws Exception {
try {
final Connection conn = getUpDBConnection();
printLog();
} catch (Exception e) {
rollback();
throw e;
}
}
}