记录学习使用,欢迎留言讨论(如果想要知道完整的知识请查看java编程思想第六章的内容)
关键字import
不使用import
public class MyTest {
public static void main(String[] args) {
// 不使用import导入就要写全类名,还有就是出现同名类冲突时
// (比如导入的两个包有相同类名的类)也要写出全类名
java.util.ArrayList<Object> list = new java.util.ArrayList<>();
}
}
使用import
import java.util.ArrayList;
public class MyTest {
public static void main(String[] args) {
// 使用import导入可以访问导入的public权限资源
ArrayList<Object> list = new ArrayList<>();
}
}
静态导入——可以直接操作静态方法
package 访问权限控制;
public class Print {
public static void print(Object obj){
System.out.println(obj);
}
}
如果使用静态导入,即使同包也需要静态导入
package 访问权限控制;
// 静态导入——注意使用static关键词了的
import static 访问权限控制.Print.*;
public class MyTest {
public static void main(String[] args) {
print("龟龟");
}
}
public权限
可以供任何人使用,不同包只要使用import导入即可。
protected权限
可用于同包和其衍生的子类。
默认权限
可用于同包。
private权限
除了自己都不能操作。
通过对构造器使用private修饰不让此类可以被除自己以外new一个新的类
注意点:如果显示写构造器,会使用默认的构造器,单例将失败。
通过访问权限可以实现单例模式
单例模式——饿汉式(饿汉和懒汉都有相应的缺点还有双重检查等请查阅其他资料)
//饿汉模式(静态常量)
public class Singleton1 {
public static void main(String[] args) {
// 测试
Singleton instance1 = Singleton.getSingleton();
Singleton instance2 = Singleton.getSingleton();
// 为True地址一致
System.out.println(instance1==instance2);
System.out.println("instance1.hashCode="+instance1.hashCode());
System.out.println("instance2.hashCode="+instance2.hashCode());
/*打印:
true
instance1.hashCode=366712642
instance2.hashCode=366712642
*/
}
}
// 饿汉式(静态变量)
//类加载的时候执行代码,可能造成内存浪费
//避免了线程同步问题
class Singleton{
// 1、 私有化构造器,外部能new
private Singleton(){
}
// 2、 本类创建一个对象实例
private final static Singleton instance = new Singleton();
// 3、 提供一个对外的公共的静态方法,返回实例对象
public static Singleton getSingleton(){
return instance;
}
}