之前没去注意的修饰符,一般变量前面没添加,一个是不知道有什么用,一个是懒,后面遇到项目的时候就会发现私有和公有区别还是很大的。
(1)首先是包名
使用一个类的时候,例如集合类,就需要引入这个包,然后再使用该包下面的类。如:
package com.myown.iaiti; public class Print { static void print(String s){ System.out.println(s); } }
(2)public
public,公共的,以前的老师经常用老子来比喻,这是公共的东西,老子给你用,public紧跟数据成员,说明对每个人都是可用的。
(3)private
private,私有的,老子的私有财产,你不要动它,除了包里含有这个数据成员的类可以用之外,其他类不能使用,这部分是设计者本身不想给外人看和修改的。
public class Print { public static void main(String[] args) { GetIt g = new GetIt(); } } class GetIt{// 注意 一个文件只能有一个公共类 如果你想在 //前面加上public 那么就不要和Print写在同一个文件 private GetIt(){} }
The constructor GetIt() is not visible,不可见,看出用处了吧,单例模式也是这么用的,控制对象的创建。
单例模式的应用:
class A{ private A(){} private static A a = new A(); public static A getInstace(){ return a; } }其他的类不能通过new来创建对象,因为构造器被private所修饰,用处在于,当这个A类极为复杂,耗内存的时候,我需要严格控制A对象的创建。既然举了单例,顺便就把单例给讲了。之前看过一些人写的,实在太经典,太厉害了。
上面那种是属于饿汉式,就是一来就帮你new出来,以后new的时候就直接用,不存在线程问题,缺点是放着如果没用的话就是资源浪费。
懒汉式
public class A { private A(){ } private static A a; public static A getInstance(){ if(a == null){ return a = new A(); }else{ return a; } } }
完美的方法是结合两者:
public class A { // 私有静态内部类, 只有当有引用时, 该类才会被装载 private static class LazyA { public static A A = new A(); } public static A getInstance() { return LazyA.A; } }
(4)protected
Print是基类,国人喜欢讲父类,但是老外觉得子类更牛逼,基类算是一个根基或者基础吧,protected就是老子专门留给儿子的财产。
public class Print { protected void print(){} private void cannotprint(){} } public class PrintSon extends Print{ void get(){ print(); //cannotprint(); private 私有的方法,子类还是不能用 } } public class NotSon { void get() { print(); } }
(5)类的访问权限
每个文件只能有一个public类。
类名和文件名一致。
单例的话如果没基础看起来有点超前,但是后面知识点完善之后,会容易理解,访问权限的控制还是在于你想不想把自己的那部分代码给别人直接使用。
Java编程思想(三) —— 访问权限的控制,布布扣,bubuko.com
原文地址:http://blog.csdn.net/iaiti/article/details/38418927