首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java进阶 - 打包

2012-12-28 
Java进阶 ----封装????? 封装,是面向对象三大特征之一。它指的是将对象的状态信息隐藏在对象内部,不允许其

Java进阶 ---- 封装

????? 封装,是面向对象三大特征之一。它指的是将对象的状态信息隐藏在对象内部,不允许其他累直接访问,带有隐私权的概念。假如其他类要访问一个类的私有属性,只能通过它对外开放的方法是才合法的,否则都是违法,不允许放行的。

????? 因为封装,于是出现了访问控制符的出现,他们分别是private、默认无修饰符(default)、protected、public 四种,下面分别介绍下它们:

??????? private: 译意是“私有的”。被private修饰的属性或者方法是几乎被类完全占有,它只能在定义它的类里使用,如果外界需要访问,那么可以通过类对外开放的方法。

????? default:没有使用任何访问控制符,就称它是默认访问控制(和friendly是不同时期的同一产物)。它的最高限制在同个包里,即被default修饰的属性只能被同个包里的其它类访问,当然可以在定义它的类里被访问。

?????? protected:译意是“被保护的”。它又高一级 -- 子类访问权限,即继承这个类的子类不管跟父类有没有在同个包,都可以访问被protected修饰的成员。同理,同个包中,同个类中也可以被访问咯。

???????? public:?? 译意是“公共的”。 这是最宽松的访问控制级别。只要一个类在其它类能生产实例,那么该实例就可以毫无阻碍的访问任何被public修饰的成员。

?

?????? 小结如下表

Java进阶 -  打包

?

?????? 代码如下:

package encapsulation;/************************************************** *                                                 * @author:      瘋叻ハ.兩                                                                  * @create-time: 2011-5-29 下午09:37:32              * @revision:    1.0                                 * @purpose:     模拟同个包内的访问情况                     *                                                 ***************************************************/class T{private String name;public int age;private T(){}T(String name){this.getName(name);}private void getName(String name){// 用传入的参数赋值给私有属性namethis.name = name;// 在同个类里访问私有属性;前面并没有提到this的使用说明,这里小注下,它可以简单理解成类的实例的替身System.out.println("名称是:"+this.name);}// default修饰的方法void say(){System.out.println("My Name is "+this.name);}}public class TestVisit {public static void main(String[] arg){// new T(); 无参构造是私有的,只能在本类中调用,比如T类在构造方法调用自己的私有方法// 有参构造不是私有的,可以同包类之间调用T t = new T("pirates");// 根据上行的,t不能调用私有的getName方法及name属性//t.getName();// 但是可以使用默认的方法t.say();}}

????? 运行结果:

??????????? 名称是:pirates
??????????? My Name is pirates

?

???????结果分析:如果还不清楚结果的原因,可以自行阅读“Java起航 ---- 方法”一文中关于方法传递引用变量的思想,在此就不解释了

?

?

?

??????既已提到封装的概念,顺便分享下我找到解释为什么Java的代码会有?public static void main(String[] args){ }

?

??????jvm在试图运行一个类之前,先检查该类是否包含一个特殊方法。

?1、这个方法必须是公有的,以便在任何位置都能访问得到。

?2、这个方法必须是static的,因为这个方法不能依赖任何该类的实例即可运行,而非static的方法,在运行之前要先创建该类的实例对象。

?3、这个方法没有返回值。和C/C++程序不一样,java的程序默认都以常态结束,所以main不需要返回值。如果要以非常态结束程序,可以用System.exit(1)。

?4、这个方法必须可以接受数目不定的String类型的参数,最早并没有JavaIDE工具,方便运行者可能要附加运行参数。

如java HelloWorld jack 100,这里的jack和100就是运行参数。


为什么是String呢?因为String具有普遍性。任何字面形式都可以解释成String,而其他类型则不然(如jack就不能解释成整数或浮点数),所以用String来存储参数最合适。
而因为参数数目不限一个,所以用了数组,即String[]。在Java 1.5以后,还可以写成String...,表示数目不定。
至于参数的变量名可以任意,只要保证在方法内部按该变量名来获得参数就行了,从变量的作用角度来说,叫arguments或args当然是最合适的。

至于这个方法的名字为什么一定是main,有历史原因,因为最早的C以main函数作为程序入口,java沿用了这个历史传统。

?

??????? 在此谢谢作者...Dan1980

热点排行