Java教程

java对象

本文主要是介绍java对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

对象

概述

java是一门面向对象的程序设计语言,对象是由类抽象出来的,所有问题都通过对象来处理,对象可以操作类的属性和方法解决相应的问题,所以了解对象的产生、操作和消亡是十分必要的。

对象的创建

在java语言中通过new操作符创建对象。在构造方法中,每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程语法:Test test=new Test();
Test test=new Test(“a”);
在这里插入图片描述
testd对象被创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了存储空间。在构造方法中可以初始化成员变量,当创建对象时,自动调用构造方法。

每个对象相互独立,在内存中占据独立的内存地址,并且每个对象都具有自己的声明周期,当一个对象的声明周期结束时,对象就变成垃圾,由于java虚拟机自带垃圾回收机制处理,不能在被使用。对象与实例事实上可以通用。

访问对象的属性和行为

用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。由于对象的属性和行为在类中是通过类成员变量和成员方法的形式来表示的,所以当对象获取成员时,也相应的获取了对象的属性和行为。

public class TransferProperty{
	int i=47;
	public void call(){
		System.out.println("调用call()方法");
		for(i=0;i<3;i++){
			System.out.println(i+"");
			if(i==2){
				System.out.println("\n");
			}
		}
	}
	public TransferProperty(){
	}
	public static void main(String[] args){
		TransferProperty t1=new TransferProperty();
		TransferProperty t2=new TransferProperty();
		t2.i=60;
		System.out.println("第一个实例对象调用变量i的结果:"+t1.i++);
		t1.call()
		System.out.println("第二个实例对象调用变量i的结果:"+t2.i);
		t2.call();
	}
}

在这里插入图片描述

上述代码的主方法中首先实例化一挂对象,然后使用"."调用类的成员变量与成员方法。虽然使用两个对象调用同一个成员变量和成员方法,但他们会产生不同的结果,那是因为两个对象的产生是相互独立的。两个对象之间的值互补影响

如果希望成员变量不被其中任何一个对象单独改变,可以使用static关键字。例如给上面代码中的成员变量i加上static运行结果如下:
在这里插入图片描述
变量i被static修饰符修饰后,i的值被t1与t2共享,两个对象同时指向同一块内存区域。所以t2给i赋值60后,t1对象的成员变量也变为60.对象t1调用call方法结束后,i的值变为3,所以t2对象调用call方法时i的值也为3.

对象的引用

java语言中虽然一切都可以看做对象,但真正的标识符实质上是一个引用。语法:
类名 对象引用名称 例如一个Book类的引用:Book book;通常一个引用不需要有一个对象相关联。相关语法:Book book=new Book();引用只是存放一个对象的内存地址,并非存放一个对象。严格说引用与对象是不同的,但是可以将这种区别忽略,如果可以简单地说book是Book类的一个对象,而事实上应该是book包含Book对象的一个引用

对象的比较

java中有两种对象的比较方式即“==”与equals()方法。两种方式有着本质上的去别 例:

public static void main(String[] args){
	String str1=new String("abc");
	String str2=new String("abc");
	System.out.println(str1==str2);
	System.out.println(str1.equals(str2));
}

在这里插入图片描述由结果可知直接比较str1str2会发生错误,这是因为比较的是两个字符串的地址值,这两个地址值不同所以结果false,而equals比较的是两个字符串的类容

对象的销毁

每个对象都有生命周期,当生命周期结束时,分配给该对象的内存地址将会被回收。而其他语言则需要手动回收废弃的对象,但是java拥有以整套的垃圾回收机制。

虽然垃圾回收机制已经很完善,但垃圾回收机制只能回收那些有new操作符创建的对象。若是某些对象不是通过new操作符在内存中获取一块内存区域,这种对象不可能被垃圾回收机制所识别。所以在java中提供了一个finalize()方法。它是object类的方法,他被声明为protected,用户可以在自己的类中定义这个方法。如果用户在类定义了finalize()方法,在垃圾回收时首先调用该方法,在下一次垃圾回收时才能真正回收被对象占用的内存。
然而垃圾回收或finalize()方法不保证一定会发生,当java虚拟机内存耗损待尽时,他是不会执行垃圾回收的。

由于垃圾回收不受认为控制,具体执行时间也不确定,所以finalize()方法也就无法执行,为此,java提供了System.gc()方法强制启动垃圾回收器

这篇关于java对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!