package com.felay.demos;
import static java.lang.Math.*;
public class Demo4 {
public static void main(String[] args) {
/**
* java的访问控制权限是通过四个关键字来进行实施的
* 1.private
* 2.protected
* 3.default(暂且这么说)
* 4.public
*
* 当我们打开java的源码的时候,我们回发现所有的class文件都在许多
* 不同的包里,就是哪些以com,sun,java,javax,开头的多级目录组成
* 的包,刚开始在学习java的时候,还在想,为什么不把所有的class文件都
* 放在一个文件夹下呢?那样查找和使用多方便啊,后来随着学习的深入,才发现
* 自己的想法有多么幼稚.现在看来,之所以有包的存在,就是解决我们在编程的
* 过程中可能会出现的类冲突问题,假如我们在一个公司合作开发项目的时候,我
* 们无法保证每个人编写的类都是独一无二的,甚至能跟java类库中的类也不会
* 出现冲突,因为一旦出现类冲突的时候,JVM就无法正确辨别我们想要使用的类
* 因此,这个时候包就显示的很重要了,记得刚开始学习的java的时候,总是直接在
* Eclipse下的src目录下直接建立class文件,而现在也会随着规范来进行包
* 的合理命名,尤其是在学习MVC模式后,能够更加合理的命名各个包的名称.当我们写
* 出自己定义的类的时候,我们只需要在class文件的最开始处写出这样的语句:
* package 包名即可,然后在其他的类文件中需要使用该类的时候,只需要使用
* import语句把我们自己定义的类导入即可,这跟VC中的include和namespace
* 很类似,都是为了解决出现类冲突的问题.有时候,我们在使用一个java的类库的时候
* 我们需要使用到同一个包里的许多类文件,经典的时候java的IO和java的swing
* 都需要使用到同一个包里的多个文件,此时我们就可以不用一个文件一个个导入的,
* 我们可以这样一次把该包中的所有文件同时导入 import 包名*;这样我们就看不到
* 在程序最上方的一大把笼子import语句了.再有有时候我们在使用一些工具库的时候
* 不想总是重复的输出类名来调用静态方法,那么这个时候我们就可以使用静态带入了
* import static 包名;这样的使用一般是在我们使用工具类库,比如Math类的时候
* 这样我们就会在调用该类的方法的时候就不要总是写上Math了,如下
*/
max(100, 200);
min(100,200);
abs(-100);
ceil(10.9);
/**
* 这个时候,我已经在最上面静态导入了Math类,在使用它的方法的时候,就不需要在方法前
* 带上类名了.
* 下面我们就开始说说上面的四个访问权限控制的关键字.
* 1.public
* 书上把public叫做接口访问权限,意思就是该关键字后的所有成员都可以访问到该关键字申明
* 的成员.但是总是感觉书上这样说并不是很明朗,我们可以换个说法,就取其本意,公开的,何为公开
* 呢?就是该成员变量对外界是公开的,不仅本类中的任何地方可以方该成员,而且在类的外部也可以访
* 问到该成员,意思就是,我们在某个类内部定义了一个public成员,那么只要我们拥有该类的实例,
* 我们就可以访问该成员,不管该类的实例在哪个地方,在同一个文件中也可以,在同一个包也可以,在
* 不同的包也可以,这就体现出了公开的意思.但是这么做是非常危险的,因为数据没有安全性,因此,
* 在很多时候我们只是对类的成员方法进行公开,而成员属性我们往往是进行私有保护的.那么就涉及
* 到另外一个关键字
* 2.private
* private表示私有的,也就是说,凡是被private修饰的成员,都只能在本类中其他的成员访问,其他
* 地方都无法访问该成员,包括同一个文件中的其他类,也无法访问,这个关键字对数据的保护非常好,因此,我们
* 往往把一些成员属性都使用private来进行保护,而把访问该属性的方法使用public给外界.当然也有一些
* 例外,有些时候,一些成员方法也是需要使用private来进行访问,这就需要你写自己定义的类的时候对业务的
* 需求了,其中最经典的是单例模式,把构造方法都给private私有了,外界无法new一个对象,而只能通过public
* 的方法来获取实例对象.但是有时候,我们在使用一个成员的时候,我们希望在本类以外的其他地方无法访问成员,但是
* 在它的子类中,却可以访问到的,这个时候我们就可以使用另外一个关键字
* 3.protectd
* 这个关键字,很多时候我们使用到的并不是很多,因为现在的软件工程,好像都喜欢使用组合而非继承,因此使用到
* protected的地方就不多了,但是并不是说就不使用继承了,我们可以看看java的源码,在他的源码中就大量的使
* 用了了继承,只是因为,作为一个类库,他本身就需要高度耦合性.而protected正体现了在单根层次上的数据共享,
* 因为被protected修饰的成员,只能在某一个层级结构上进行传递,而且只能是在子类获取父类中的protected
* 成员,想法却不行,很遗憾,protected只能在继承中使用.
* 4.default
* 这个是包访问权限,就是那些不带权限修饰符的成员,它们可以被在同一包的该类的实例对象所访问到,但是一旦出了这个包
* 就不允许访问了.因为很多时候,一个包里的类文件的耦合性比较高,如果总是使用其他修饰符就有些不方便了,但是包括java
* 的的设计者们都不建议这么做,即我们在使用成员的时候,建议使用修饰符,这样程序会更加健壮.
*
*
*
* 上面说的都是某个类的成员的访问权限,那么类本身有没有访问权限呢?当然有,不过类只有三种访问权限的关键词
* 1.public
* 2.private
* 3.default(暂且这么说)
*
* 如果一个类被public修饰,则表明该类能够在任何地方被使用,而且基本上每个文件都只有一个public修饰的类,
* 而且文件名称还必须和Public修饰的类的名称保持一致才能被JVM所编译.我们编写类的目的就是使用该类,那么此时
* 的private修饰的类有何意义呢?在最开始的时候不明白为什么会使用private来修饰类,直到现在也不是很理解,
* 尽管的确可以使用private来修饰类,但是只是限制于在内部类的使用中才会出现这样的情况,但是在内部类中使用
* private来修饰类,本身意义也不大,因此,直到现在,我对那些使用private修饰的类,都很害怕.而default就是
* 那些没有访问权限修饰符修饰的类,一般只是测试的时候使用,或者作为辅助类来使用,大多时候使用不到,也不建议,但是
* 在swing编程中,确实被大量使用,所有的监听器就是作为辅助类来使用默认修饰.下面就给出一个被private修饰的类
* 但是不建议这么写.,因为这样写的时候,容易出现逻辑紊乱,而且意义也不是很大,(swing编程除外),在swing编程中
* 出现了大量的类似写法.
*/
}
private class Demo5{
private String name;
public String getName(){
return this.name;
}
}
}