下面就是面向对象的一些补充内容
- final的用法
- final修饰的类,不能被继承。
- final修饰的方法,不能被子类重写。
- final修饰的变量为常量,只能赋值一次。
- final的举例
- String就是被final修饰的类,所以String不能被继承。
- Math中的PI就是被final修饰,表示不能被再次赋值。
- 使用final修饰方法的原因
- 第一、把方法锁定,防止任何继承类修改它的意义和实现。
- 第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
- 访问修饰符的区别
- public:可以被所有其他类所访问。
- protected:自身,子类及同一个包中类可以访问。
- default(默认):同一包中的类可以访问,声明时没有加修饰符,认为是friendly。
- private:只能被自己访问和修改。
- 注意:
-
- Java的访问控制是停留在编译层的,也就是它不会在.class文件中留下任何的痕迹,只在编译的时候进行访问控制的检查。
- 其实,通过反射的手段,是可以访问任何包下任何类中的成员,例如,访问类的私有成员也是可能的。
-
- 范围图:
-
访问修饰符\作用范围 所在类 同一包内其他类 其他包内子类 其他包内非子类 private 可以访问 不可以 不可以 不可以 缺省 可以 可以 不可以 不可以 protected 可以 可以 可以 不可以 public 可以 可以 可以 可以
-
- 对象转型的规则
- 一个基类的引用类型变量可以“指向”其子类的对象。
- 一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。
- 可以使用 (引用 变量 instanceof 类名) 来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。
- 子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)
- 什么是单例模式
- 概念:JAVA单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
- 特点:
- 一个类只能有一个实例;
- 自己创建这个实例;
- 整个系统都要使用这个实例。
- 应用场景:
- Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。
- 外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。
- 内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。
- 优点:
- 能避免实例重复创建;
- 应用于避免存在多个实例引起程序逻辑错误的场合;
- 较节约内存。
- 懒汉式(饱汉式):
-
public class Singleton { private static Singleton uniqueInstance = null; private Singleton() { // Exists only to defeat instantiation. } public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } // Other methods... }
-
- 饿汉式
-
class Single { private static Single onlyone = new Single(); private String name; public static Single getSingle() { return onlyone; } private Single() { } }
-
- 测试类
-
public class SingleTest { public static void main(String[] args) { Singleton s1 = Singleton.getInstance();//获取自己对象的方法 Singleton s2 = Singleton.getInstance(); System.out.println(s1); System.out.println(s2); System.out.println(s1==s2); Single t1 = Single.getSingle(); Single t2 = Single.getSingle();//饿汉式 System.out.println(t1==t2); } }
-
- 懒汉式(又叫饱汉式)与饿汉式之间的区别:
- 懒汉式是该类方法第一次被调用的时候创建该类对象。
- 饿汉式是该类第一次加载的时候对象就已经创建好了在内存中准备调用。
以上内容就是面向对象相关的内容,当然面向对象还有很多的内容不能在有限的空间里全部展示完,在后续的内容加以补充。
还有就是一般我们做项目的时候,我会将面向对象贯穿到项目里面去说,将面向对象的真正的用法和设计方式体现在项目里面去,在项目里面使用面向对象的特性去开发,并设计项目的模块,让我们不再是代码的搬运工,每一个编程人员都是软件设计工程师。
精彩内容,请见下篇博客~!