关于Java对象

来源:互联网 发布:windows nt和windows 8 编辑:程序博客网 时间:2024/06/14 22:56

4.5.6参数名
参数变量用同样的名字将实例域屏蔽起来。可以用this.attributeName的形式访问实例域。this指示隐式参数,也就是被构造的对象。

public Employee(String name,double salary){    this.name=name;    this.salary=salary;}

4.6.6调用另一个构造器
this(…),意思是调用本类的另一个构造器

public Employee(double s){    //calls Employee(String,double)    this("employee #"+nextId,s);    nextId++;}

4.6.7初始化块
初始化数据域的方法:
①在构造器中设置值
②在声明中赋值
③初始化块
在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。
这种机制不是必须的,也不常见,通常,直接将初始化代码块放在构造器中

public Employee{    private static int nextId;    private int id;    {        id=nextId;        nextId++    }    ...}

调用构造器的具体处理步骤:
1)所有数据被初始化为默认值0,false,null
2)按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块
3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体
4)执行这个构造器主体
4.6.8对象析构与finalize方法
+Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器
+finalize方法将在垃圾回收器清除对象之前调用,但是这个方法很难知道何时调用

4.7.2静态导入
可以导入静态方法和静态域

import static java.lang.System.*;//就可以使用System类的静态方法和静态域,而不必加类名前缀out.println();exit(0);

4.7.3包作用域
public:可以被任意类使用
private:只能被定义它们的类使用
没有指定:可以被同一包中的所有方法访问

类路径

+类路径告诉Java编译器或者解释器去哪找它们要执行或者导入的类:Java开发环境配置中,CLASSPATH—->配置类库文件的位置
+类的路径必须与包名匹配,否则虽然编译正确,但是无法运行程序,因为虚拟机无法找到类文件
+类(可能注意到的那些 .class 文件)可以存储在目录或 *jar 文件中,或者存储在两者的组合中,但是只有在它们位于类路径中的某个地方时,Java 编译器或解释器才可以找到它们。
如何使得某个类被多个程序共享?
1.把类放到一个目录中,如/home/user/classdir
2.将Jar文件放在一个目录中,例如/home/user/archives
3.设置类路径。类路径是所有包含类文件的路径的集合
——UNIX环境中,不同项目之间的类路径用:分隔,如/home/user/classdir:.:/home/user/archives/archive.jar
——windows环境中,则以;分隔,如c:\classdir;.;c:\archives\archive.jar
上述两种情况中,.表示当前目录
类路径包括:

  • 基目录/home/user/classdir或c:\classes

  • 当前目录(.)

  • JAR文件/home/user/archives/archive.jar或c:\archives\archive.jar

    javac编辑器总是在当前目录中查找文件,但Java虚拟机仅在路径中有”.“目录的时候才能查看当前目录。如果没有设置类路径,那也并不会产生什么问题,默认的路径包含”.“。然而如果设置了类路径但却忘记了包含”.“目录,则程序仍然可以通过编译,但不能正常运行。



    类路径设置:c:\classdir;.;c:\archives\archive.jar——搜寻com.horstmann.corejava.Employee类文件

  • 虚拟机搜寻类路径过程:
    1.首先查看存储在jre/lib和jre/lib/ext(运行时库文件自动加载)目录下的归档文件中所存放的系统类文件——未找到
    2.然后查看c:\classdir\com\horstmann\corejava\Employee.class
    3.com\horstmann\corejava\Employee.class从当前目录开始
    4.com\horstmann\corejava\Employee.class inside c:\archives\archive.jar

  • 编译器定位文件过程:
    假设源文件包含下列指令并且引用了Employee类

import java.util.*;import com.horstmann.corejava.*;

1.首先查找java.lang.Employee(因为java.lang包被默认引入)
2.然后是java.util.Employee
3.再是com.horstmann.corejava.Employee
4.最后是当前包中的Employee
如果找到了一个以上的类,则编译错误(类必须唯一,import语句顺序无关紧要)。



未完待续……..