CoreJava Day 6

访问修饰符和CLASSPATH,封装

package语句和import语句

有个示范程序如下:

package com.javier.simple;

 

public class Demonstrantion {

    public static void main(String...args){

       System.out.println("Demonstrantion");

    }

}

语句中的package com.javier.simple;指明了当前编译后文件在本地系统的CLASSPATH所制定的目录结构下(注:使用的开发工具,将直接导致最终生成的.class文件的位置不同)

假设现在使用命令行的方式工作:

假设源文件在C:/DOCS/javaDemo/src/com/javier/simple/Demonstrantion.java

首先必须切换到文件所在目录,当然也可以直接使用绝对路径。

我们现在使用相对路径编译,如下

C:/DOCS/javaDemo/com/javier/simple>javac –d C:/DOCS/javaDemo/bin  Demonstrantion.java

 

当编译源文件后,就会在指定的目录下(这里指定了 C:/DOCS/javaDemo/bin),生成一个包路径,com/javier/simple,所以这里完整的.class文件生成的位置在 :

C:/DOCS/javaDemo/bin/com/javier/simple/Demonstrantion.class

注意了,此时若是想运行编译后的程序则必须配置CLASSPATH

 

按照现在的目录层次结构,CLASSPATH中的配置应该是

.;C:/DOCS/javaDemo/bin

这里配置了2.class文件的路径,其中第一个 . 表示当前目录,用 ; 分隔符添加多个路径

修改了CLASSPATH后,别忘记重新启动命令行工具。

现在运行编译后的文件,则可以在任何路径下

d:/> java com.javier.simple.Demonstrantion

 

必须使用改源文件生成时的包路径名 类名,注意,不需要加没有.class

系统会自动搜索CLASSPATH,然后会在你配置的CLASSPATH中搜索到C:/DOCS/javaDemo/bin下面的com.javier.simple.Demonstrantion这个类文件

 

当然,如果使用eclipse这样的IDE开发工具,就不需要如此复杂了,只需要设置好eclipse的运行环境,会在工程目录下指定编后后的文件,你所要做的只是在编译源文件时候,指定上 package 语句,

 

为什么要使用package语句?

为了避免不同开发者之间开发的类库文件冲突,所以使用包的概念,将每个开发者所开发的文件唯一区分开,Sun公司建议开发者使用自己的域名反转后来命名包文件

com.javier.simple

 

同样,你要使用别人开发好的库文件,就必须使用import语句

import com.javier.simple.Demonstrantion;

这样就可以使用刚才编译好的Demonstrantion.class文件了

 

当运行产生不顺利的时候,首先想到的便是classpath是否指定了目录路径,仔细检查一定会有收获的,相对而言,用集成开发环境比较方便简单。不会被classpath所困扰,然而,只有在深入了解了classpath之后,才能从容的去应对任何集成开发工具中的路径问题和环境变量问题。

 

 

访问权限:

java中的4种访问权限

public ,  protected , 默认(空者不写) ,  private

 

访问权限从大到小依次是:

 

public  -- 对所有其他类是可见的,最大的访问权限。

protected -– 对继承的子类可见的,即使子类不在同一包中,同时,对同一包中的其他类可见。

默认 --  对同一包中的其他类可见。

private – 只有在同一类中可见。

 

 

建一个private的典型例子:

package com.javier.simple;

 

public class Demonstrantion {

    private Demonstrantion() {

    }

    public static Demonstrantion makeDemo() {

       return new Demonstrantion();

    }

}

 

class Test {

    public static void main(String[] args) {

       // The constructor Demonstrantion() is not visible

       // Demonstrantion d = new Demonstrantion();

       Demonstrantion d = Demonstrantion.makeDemo();

      

    }

}

 

在这个范例中,你无法通过Demonstrantion d = new Demonstrantion(); 来创建Demonstrantion类的对象,因为构造器是private的,所以,你只能通过其中的一个公共的静态方法来创建对象,这样可以控制其他类任何去创建一个他的对象了。

而且,如果构造器设置为私有的,将阻止了其他类的继承。

需要注意的是,一个标准的类不可以是private或者protected,但是,内部类除外。

 

 

所谓封装:

根据上面的例子:通过设置private的访问权限,来达到控制别人创建对象的目的

 

当然,你可以将成员字段设置为private,然后,提供一个public的方法去访问这些设置为private的成员字段,并且在这个public的方法中提控一些访问的条件控制,比如大于某数,或者等于某字符或者其他等等的控制,来达到一个访问控制,这种将成员字段设置为private,而将方法设置为public的做法,通常而言就称之为封装,这样带来的好处就是,调用者不需要知道成员字段的具体实现方法,而只需调用即可,而类的创建者则可以有用完整的控制权力,以防止调用者给出一个非法的参数,

 

通常,类创建者将字段设置为private,而提供public访问权限的 set/get的方法名,这也是普遍并且标准的做法之一。

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值