和数组一样,在Java中使用new来调用构造方法来创建对象,学到这里倒是让我想到了C++,果然有了C和C++的基础,学习java会很快。言归正传,语法如下: 类名 对象名 = new 类名(参数) 这里的参数指构造方法的参数,如构造方法无参,则不用写。 当创建对象时,自动调用构造方法,也就是说在java中初始化与创建是被捆绑在一起的。 每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成垃圾,由java虚拟机自带的垃圾回收机制处理,不能再被使用。
创建出对象后,可以使用对象.类成员来获取对象的属性和行为,也就是成员变量和成员方法,这些在前文提到过。所以对象获取类成员就是获取属性和行为。 编写代码:
package number;
public class Book {
int i=666;
public void Pr()
{
System.out.println(i);
}
}
//首先在项目中创建一个类,并定义一个成员变量
public class Xuexi {
public static void main(String[] args) {
Book book1 =new Book(); //创建一个对象
book1.i=999;
Book book2 =new Book(); //创建一个对象
book1.Pr();
book2.Pr();
}
}
//在主方法中创建两个Book对象
运行结果如下:
通过结果,我们可以很好的证明每个对象是独立的,我们改变了book1中i的值,但是boo2中的i值还是原来的。接下来,我们把i修改为静态变量,看一看效果如何:
package number;
public class Book {
static int i=666;
public void Pr()
{
System.out.println(i);
}
}
结果如下:
可以看到声明了静态的变量是可以被共用的。
在Java语言中一切都可以看作对象,单正在的操作标识符实质上是一个引用,引用在Java中的语法如下: 类名 对象引用名称 Book book;这边是引用 Book book=newBook();这边是引用与对象相关联 引用只是存放一个对象的内存地址,并非存放一个对象。严格地说,引用和对象是不同的,但是可以将这种区别忽略,如可以简单地说book是Book的一个对象,而事实上应该是book包含Book对象的一个引用。
Java语言中有两种对象的比较方法,分别为“==”运算符和equals()方法。
equals()方法是String类中的方法,它用于比较两个对象引用所指的内容是否相等
而”==“运算符比较的是两个对象引用的地址是否相等。
package number;
public class Xuexi {
public static void main(String[] args) {
String c1=new String("huagou");
String c2=new String("huagou");
System.out.println("== c1和c2运算结果"+(c1==c2));
System.out.println("equals c1和c2运算结果"+c1.equals(c2));
}
}
运行结果:
每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址将会被回收。在其他语言中需要手动回收废弃的对象,但是Java拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器将回收无用的但占用内存的资源。 Java将下面两种情况视为垃圾: 1.对象引用超过作用范围。 2.将对象赋值为null。
回收机制只能回收使用new创建的对象,如果不是通过new在内存中获取了一块内存,这种对象可能不被垃圾回收机制所识别,所以java提供了一个finalize()方法,这个方法是Object类的方法,它被声明为protected,用户可以在自己的类中定义这个方法,如果在类中定义了这个方法,在垃圾回收时,会首先调用该方法,在下一次垃圾回收动作发生时,才能真正回收内存。
java还提供了System.gc()方法强制启动垃圾回收器。