权限修饰符和常用关键字学习 {#权限修饰符和常用关键字学习}
Public(公共权限) {#Public- 公共权限}
- public:(公共权限)
- 可以修饰类, 成员变量, 成员方法, 构造方法
- 被 public 修饰的成员, 可以在任何一个类中被调用, 不管同包或不同包, 是权限最大的一个修饰符
public class Demo{
}
Private(私有权限) {#Private- 私有权限}
- private:(私有权限)
可以修饰成员变量, 构造方法, 成员方法, 不能修饰类(外部类, 内部类不考虑)
被 private 修饰的成员, 只能在定义它们的类中使用, 在其他类中不能调用。
public class Demo {
// 可以使用 private 修饰成员变量
// 名称
private String name;
// 年龄
private int age;
<span class="token comment">// 可以修饰构造方法</span>
<span class="token keyword">private</span> <span class="token class-name">Demo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token punctuation">}</span>
<span class="token comment">// 可以修饰成员方法</span>
<span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">getTest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token punctuation">}</span>
}
Default(默认权限) {#Default- 默认权限}
- default(默认权限)
- 类, 成员变量, 成员方法, 构造方法都能使用默认权限, 即不写任何关键字
- 默认权限即同包权限, 同包权限的元素只能在定义它们的类中使用, 以及同包的类中被调用
class Demo {
}
Protected(受保护权限) {#Protected- 受保护权限}
- protected:(受保护权限)
- 可以修饰成员变量, 成员方法, 构造方法, 不能修饰类(外部类, 内部类不考虑)
- 被 private 修饰的成员, 只能在定义它们的类中使用, 在其他类中不能调用。
- 如果有不同包的类想调用它们, 那么这个类必须是定义它们的类的子类。
class A{
protected int num = 1 ;
}
public class B extends A{
public void fun(){
new A().num;// 不可以访问
}
}
注意 {#注意}
- 并不是每个修饰符都可以修饰类(指外部类), 只有 public 和 default 可以。
- 所有修饰符都可以修饰数据成员, 方法成员, 构造方法。
- 为了代码安全起见, 修饰符不要尽量使用权限大的, 而是适用即可。比如, 成员变量, 如果没有特殊需要, 尽可能用 private
- 修饰符修饰的是"被访问"的权限
| 修饰符 | 同类中 | 同一个包中(子类和无关类) | 不同包(子类) | 不同包(无关类) | |:---------:|:---:|:-------------:|:-------:|:--------:| | public | Y | Y | Y | Y | | protected | Y | Y | Y | N | | 缺省 | Y | Y | N | N | | private | Y | N | N | N |
状态修饰符 {#状态修饰符}
- static
- 静态的意思, 可以修饰成员变量, 成员方法, 不能修饰类 (普通类) 和构造方法
- 被修饰的变量和方法可以通过类名调用
// 将用户相关变量修饰为静态常量
private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql:///test";
private static final String USER = "root";
private static final String PASSWORD = "root";
// 可以修饰成员方法
public static Connection getConnection() throws Exception {
InputStream is = JDBCUtils.class.getResourceAsStream("/jdbc.properties");
Properties pp = new Properties();
pp.load(is);
<span class="token class-name">Connection</span> conn <span class="token operator">=</span> <span class="token class-name">DriverManager</span><span class="token punctuation">.</span><span class="token function">getConnection</span><span class="token punctuation">(</span><span class="token constant">URL</span><span class="token punctuation">,</span> pp<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> conn<span class="token punctuation">;</span>
}
- final
- 最终的意思, 可以修饰类, 成员变量, 成员方法, 不能修饰构造方法
- 修饰的类不能被继承, 被修饰的变量是常量不可变参数, 被修饰的方法不能被继承
// 1. 将固定字符串定义为常量
private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql:///test";
private static final String USER = "root";
private static final String PASSWORD = "root";
抽象关键字 {#抽象关键字}
- abstract
- 抽象的意思, 不能修饰构造方法, 不能修饰成员变量, 可以修饰类和成员方法
- 被修饰的类不能被实例化, 只能被继承, 被修饰的成员方法在子类中必须被重写
// 可以修饰类
public abstract class Demo1 {
// 可以修饰成员方法
public abstract void getTest();
}
关键字 {#关键字}
- Super
子类的每个构造方法中均有默认的 super(),调用父类的空参构造。手动调用父类构造会覆盖默认的 super().
super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。
super(..)是根据参数去确定调用父类哪个构造器的。
- This
this 代表所在类的当前对象的引用(地址值),即代表当前对象。
this 可以出现在实例方法或者构造器中
this 出现在实例方法中,谁调用这个方法(哪个对象调用这个方法),this 就代表谁(this 就代表哪个对象)。
this 出现在构造器中,代表构造器正在初始化的那个对象。
一个完美的 JavaBean {#一个完美的 JavaBean}
public class Demo{
// 成员变量
// 无参构造器【必须】
// 满参构造器
// getter 方法
// setter 方法
// toString 方法
}