Java学习笔记 - 04

来源:互联网 发布:autocad2016软件下载 编辑:程序博客网 时间:2024/05/09 22:23

今天学习Java的类和对象。

和数组很类似,声明“指向类的变量”语法为:

ClassName objectRefVar;

然后使用new操作符来创造对象:

objectRefVar = new Classname();

当指向类的变量不指向任何对象的时候,这个变量的值为null

当一个对象不再需要的时候,可以将指向其的所有变量设置为null,然后这个对象将会被Java Virtual Machine自动回收,这种行为称为“垃圾回收”。(想对于C++的垃圾回收,Java的自动垃圾回收大大方便了程序员的工作,因为手动回收垃圾往往会有漏掉的“垃圾”)


Java中的三类modifiers。

public:    makes classes, methods, and data fields accessible from any class.

private:   makes methods, data fields accessible only from within its own class.

*If public or private is not used , then by default the classes, methods, and data are accessible by any class in the same package. This is known aspackage-private orpackage-access.



若你不希望用户在使用你的一个类的时候建立具体的对象,比如对Math建立一个对象,一个好的解决方法是定义一个假的构造函数。

e.g.

private Math(){}



当你在一个文件中的类要引用另一个文件中的类,则在编译当前文件的时候,编译器会自动编译另一个文件,只要那个文件未被编译过自从最近的一次修改之后。


static修饰符:

当一个变量或是方法被生命为static的时候,这个变量或者方法在类中是可以被直接引用的,他们不依赖于这个类所具体指定的对象。

因此我们将类中的变量和方法划分为两类:*instancestatic.

instance variables or methods:依赖于对象,只有对象建立之后,我们通过对象来引用,不同对象中的这些变量或者方法存于不同的地址;

static variables or methods:不依赖于对象,可以通过对象和类引用,不同对象中(或者没有对象)这些变量或者方法存于相同的地址;

static variables or methods 同样可以对象来进行调用(但是并不推荐这样使用)。


this关键字:

在类中,由于变量或者方法可能发生重名的问题,而发生重名的时候,子模块中的变量或者方法都会拥有更高的优先级而暂时隐藏类中定义的变量和方法。

为了能够调用这些“隐藏”的变量和方法,有两种方式:

instance variables or methods:使用this.instanceVar的方式进行调用;

static variables or methods:使用Classname.staticVar的方式进行调用;


如果一个类中有多个构造函数,那么推荐尽可能多地使用this(arg-list)。一个含有少量参数(或者没有参数)的构造函数可以通过this(arg-list)来调用含有较多参数的构造函数,这样可以简化代码书写量并且使得类更加易于维护,在Java中,在构造函数中使用this(arg-list)要求其为第一条语句。


内层类(嵌套类):

定义在另一个类范围内的类,具有一般的类的属性,同时有以下的新特性:

#1.内层类可以调用定义在外层类的数据和方法,所以不需要将外层类调用信息传递到内曾类的构造函数中。因此,内层类使得程序更简洁;

#2.内层类帮助外层类的工作,并且被编译成一个.class文件命名为OuterClassName$InnerClassName.class

#3.一个内层类可以被声明为public, protected或者private,其规则和对类中的成员的规则同样使用;

#4.一个内层类可以被声明为static。一个static内层类可以通过外层类的类名进行访问。一个static内层类不能访问外层类的non-static成员(若内层类没有被声明为static,则内层类中的成员是不能声明为static的,除非声明成*final);

#5.内层类的对象时常在外层类中创建,但是你也可以在其他的类中创建这个内层类的对象,

     如果内层类是non-static,你就必须先创建一个外层类的对象,之后再创建内层类的对象,语法如下:

OuterClass.InnerClass innerObject = outerObject.new InnerClass()

     如果内层类是static,创建一个对象,要使用如下的语法:

OuterClass.InnerClass innerObject = new OuterClass.InnerClass()




NOTES

*instance是为了便于理解而附加的叙述修饰。

*这个和protected不一样,关于protected将会在继承与多态中介绍。

*final的机制可能会有点不一样,可以了解一下

0 0