类名称 对象名称 = new 类名称() ;
按照以上的格式就可以产生对象了,我去…原来搞个对象那么容易哈…new 一下就一个对象啧啧啧
如果要想访问类中的属性或方法(方法的定义),则可以依靠以下的语法形式:
访问类中的属性:
对象.属性 ;
调用类中的方法:
对象.方法();
在java中对象声明有两种含义
声明对象:
Horse horse= null; ;
// 表示声明了一个对象,但是此对象无法使用,horse没有具体的内存指向
实例化对象:
horse= new Horse() ;
// 表示实例化了对象,可以使用
//通过对象调用方法:
horse.eat()
//匿名对象调用方法:
new Horse().eat()
代码实例:
public class Test8{
public static void main(String[] args){
//类的使用
Horse h=null;//声明一个类的变量(变量 除了八种基本数据类型 都是引用类型,包括数组)
//创建一个Horse类型的对象 (实例化一个对象)
h=new Horse();
//有了对象,我们就可以调用对象的属性和方法
h.name=“赤兔马”;
h.age=350;
h.run();//调用方法 方法就被执行了
h.eat();
//匿名对象:只能使用一次 用完后就会被释放
new Horse().eat();
h=null;//把对象释放掉
// h.eat(); 当对象不存在时,调用改对象的方法和属性会报空指针异常
}
}
//自定义一个类(类型 引用类型) Horse 类
class Horse{
//在类中定义属性(特征)
String name;
int age;
//定义方法
public void run(){
System.out.println(“我是”+name+“,我”+age+“岁了,我还能日行千里”);
}
public void eat(){
System.out.println(“我吃仙草,还吃得多”);
}
}
4、对象内存分析
1、new 关键字表示创建一个对象
2、new 关键字表示实例化对象
3、new 关键字表示申请内存空间
注意:如果使用一个没有申请内存空间的对象,会报空指针异常:java.lang.NullPointerException
对象在内存中的结构:
Horse horse= null;
horse 存的是地址因为=null 所以现在horse里面没有地址
horse = new Horse();
字符串的默认值是null, int的默认值是0;
给对象的属性赋值:
注意,在堆内存的 name它存的也是地址,我是为了方便理解所以把它和字符串放在一起了,name存的也是地址它指向一个内存空间,这个空间存的是真正的字符串小白。
在内存中创建多个对象:
分别给两个对象的属性赋值:
声明两个对象,一个实例化,一个没实例化
对象之间的赋值:
horse2没有实例化,但是把horse1赋值给horse2了,赋值的过程就是,将horse1的地址给了horse2,所以现在是horse1和horse2指向了同一块内存,所以现在把horse2.name=“嘿嘿”,你打印出来horse1的name也等于嘿嘿
分别实例化两个对象:
对象之间的赋值:
这个赋值过程和上边的是一样的,不一样的是horse2原先指向的内存,因为没有被指向,所以它会被gc认为是垃圾就会被释放掉,什么是gc呢,gc就是虚拟机里的Garbage Collection垃圾回收器
5、小结
-
new关键字:表示向内存申请空间,也表示实例化一个对象,创建一个对象。
-
一个对象在内存中的大小,由该对象的所有属性所占的内存大小的总和。引用类型变量在32位系统上占4个字节,在64位系统上占8个字节。加上而外的对象隐性数据所占的大小。
-
相同的类型才可以赋值
-
不同的引用,指向同一个对象,任何一个引用改变对象的值,其它引用都会反映出来。
-
编程时要注意的问题,在确定不使用对象时,要尽早释放对象:引用=null
-
当一个堆中的对象没有被任何引用变量所指向时,该对象会被JVM 的 GC 程序认为是垃圾对象,从而被回收。
最后