黑马程序员--Java学习08--对象
2014-05-15 11:51
260 查看
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流!
----------------------
类是创建对象的模板。当时用一个类创建了一个对象时,也就是说给出了这个类的一个实例。
二、创建对象
创建对象包括对象的声明和为对象分配内存两个步骤。
1、对象的声明
一般格式为:
类的名字 对象的名字;
2、为声明的对象分配内存
使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的,构造方法的名字必须和类名相同)。如:
zhangPing = new People();
以下是两个例子:
例1:
例2:
注:如果类中定义了一个或多个构造方法,那么Java不提供默认的构造方法,例2中没有提供不带参数的构造方法,因此,例2中个如下创建对象是非法的:
p1=new PointDemo();
三、使用对象
对象不仅可以改变自己的变量的状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。
通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。
1.对象操作自己的变量(对象的属性)
对象创建之后就有了自己的变量,即对象的实体。通过使用运算符“.”,对象可以实现自己的变量的访问。
2.对象调用类中的方法(对象的功能)
对象创建之后,可以使用运算符“.”调用创建它的类中的方法,从而产生一定的行为功能。
当对象调用类中的一个方法时,方法中的局部变量被分配内存空间,方法执行完毕,局部变量即刻释放内存。局部变量声明时如果没有初始化,就没有默认值,因此在使用局部变量之前,要事先为其赋值。
例:
输出结果为:
四、对象的引用和实体
当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称为该对象的实体,而对象中存放着引用,以确保实体由该对象操作使用。
以上面例2中的PointDemo类为例,其中创建了两个对象:
PointDemo p1=new PointDemo(12,16);PointDemo p2 =new PointDemo(6,18);
内存模式如下图:
假如在程序中使用了下述的赋值语句:
p1=p2;
把p2的引用赋给了p1,因此p1和p2本质是一样的了。虽然在源文件中p1、p2是两个名字,但是在系统看来他们的名字是一个:0xDD。系统将取消原来分配给p1的内存,即释放分配给p1的变量。这时如果输出p1.x的结果将是6,而不是12,内存模式如下图:
因此,如果一个类创建的两个对象具有相同的引用,那么就具有完全相同的实体。没有实体的对象称为空对象,空对象不能使用,即不能让~个空对象去调用方法产生行为。假如程序中使用了空对象,程序在运行时会出现异常:NuIIPointerException o由于对象是动态地分配实体,所以Java昀编译器对空对象不做检查。因此,在编写程序时要避免使用空对象。
五、参数传值
当方法被调用时,如果力.法有参数,参数必须要实例化,即参数变量必须有具体的值。在Java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者定的值的副本。例如,如果向方法的int型参数x传递一个int值,那么参数x得到的值是传递值的副本。方法如果改变参数的值,不会影响向参数“传值”的变量的值。
1.基本数据类型参数的传值
对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别,比如,不可以向int型参数传递一个float值,但可以向double型参数传递一个float值。
2.引用类型参数的传值
Java的引用型数据包括对象、数组以及接口。当参数是引用类型时,“传值”传递的变量的引用而不是变量所引用的实体。
如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化,因为,两个同类型的引用型变量如果具有同样的引用,就会用同样的实体。但是,改变参数的引用不会影响向其传值的变量的引用,如下图所示:
例:
输出结果为:
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流!
----------------------
----------------------
对象
一、定义类是创建对象的模板。当时用一个类创建了一个对象时,也就是说给出了这个类的一个实例。
二、创建对象
创建对象包括对象的声明和为对象分配内存两个步骤。
1、对象的声明
一般格式为:
类的名字 对象的名字;
2、为声明的对象分配内存
使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的,构造方法的名字必须和类名相同)。如:
zhangPing = new People();
以下是两个例子:
例1:
class XiyoujiPeople { float height,weight; String head,ear,hand,foot,mouth; void speak(String s){ System.out.println(s); } } class A { public static void main(String[] args){ XiyoujiPeople zhubajie;//声明对象 zhubajie= new XiyoujiPeople();//为对象分配内存,使用new 运算符和默认的构造方法 } }
例2:
class PointDemo { int x,y; PointDemo(int a,int b){ x=a; y=b; } } public class A { public static void main(String[] args){ PointDemo p1,p2; //声明对象p1,p2 p1=new PointDemo(10,10); //为对象分配内存,使用new 和类中的构造方法 p2=new PointDemo(12,15); //为对象分配内存,使用new 和类中的构造方法 } }
注:如果类中定义了一个或多个构造方法,那么Java不提供默认的构造方法,例2中没有提供不带参数的构造方法,因此,例2中个如下创建对象是非法的:
p1=new PointDemo();
三、使用对象
对象不仅可以改变自己的变量的状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。
通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。
1.对象操作自己的变量(对象的属性)
对象创建之后就有了自己的变量,即对象的实体。通过使用运算符“.”,对象可以实现自己的变量的访问。
2.对象调用类中的方法(对象的功能)
对象创建之后,可以使用运算符“.”调用创建它的类中的方法,从而产生一定的行为功能。
当对象调用类中的一个方法时,方法中的局部变量被分配内存空间,方法执行完毕,局部变量即刻释放内存。局部变量声明时如果没有初始化,就没有默认值,因此在使用局部变量之前,要事先为其赋值。
例:
/** 创建一个XiyoujiPeople类,创建一个zhubajie对象,然后赋值并输出,调用XiyoujiPeople的方法 */ class ObjectDemo2 { public static void main(String[] args) { // TODO Auto-generated method stub XiyoujiPeople zhubajie; //声明对象 zhubajie = new XiyoujiPeople(); //为对象分配内存,使用new运算符和默认的构造方法 zhubajie.ear = "又肥又大"; //为XiyoujiPeople的ear成员变量赋初值 zhubajie.head = "是一个猪头"; //为XiyoujiPeople的head成员变量赋初值 zhubajie.mouth = "有一张猪嘴"; //为XiyoujiPeople的mouth成员变量赋初值 zhubajie.height = 1.6f; //为XiyoujiPeople的height成员变量赋初值 zhubajie.weight = 500; //为XiyoujiPeople的weight成员变量赋初值 zhubajie.speak("大家好!我是猪八戒"); //调用XiyoujiPeople的speak方法 System.out.println("我" + zhubajie.mouth ); //输出之前赋的值 System.out.println("我" + zhubajie.head); System.out.println("我的耳朵" + zhubajie.ear); System.out.println("我的身高只有" + zhubajie.height + "米"); System.out.println("但我却有" + zhubajie.weight + "公斤重"); } } class XiyoujiPeople { float height; //定义变量 int weight; String head, ear, hand, foot, mouth; void speak (String s) { //定义speak方法 System.out.println(s); } }
输出结果为:
四、对象的引用和实体
当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称为该对象的实体,而对象中存放着引用,以确保实体由该对象操作使用。
以上面例2中的PointDemo类为例,其中创建了两个对象:
PointDemo p1=new PointDemo(12,16);PointDemo p2 =new PointDemo(6,18);
内存模式如下图:
假如在程序中使用了下述的赋值语句:
p1=p2;
把p2的引用赋给了p1,因此p1和p2本质是一样的了。虽然在源文件中p1、p2是两个名字,但是在系统看来他们的名字是一个:0xDD。系统将取消原来分配给p1的内存,即释放分配给p1的变量。这时如果输出p1.x的结果将是6,而不是12,内存模式如下图:
因此,如果一个类创建的两个对象具有相同的引用,那么就具有完全相同的实体。没有实体的对象称为空对象,空对象不能使用,即不能让~个空对象去调用方法产生行为。假如程序中使用了空对象,程序在运行时会出现异常:NuIIPointerException o由于对象是动态地分配实体,所以Java昀编译器对空对象不做检查。因此,在编写程序时要避免使用空对象。
五、参数传值
当方法被调用时,如果力.法有参数,参数必须要实例化,即参数变量必须有具体的值。在Java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者定的值的副本。例如,如果向方法的int型参数x传递一个int值,那么参数x得到的值是传递值的副本。方法如果改变参数的值,不会影响向参数“传值”的变量的值。
1.基本数据类型参数的传值
对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别,比如,不可以向int型参数传递一个float值,但可以向double型参数传递一个float值。
2.引用类型参数的传值
Java的引用型数据包括对象、数组以及接口。当参数是引用类型时,“传值”传递的变量的引用而不是变量所引用的实体。
如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化,因为,两个同类型的引用型变量如果具有同样的引用,就会用同样的实体。但是,改变参数的引用不会影响向其传值的变量的引用,如下图所示:
例:
class People { int money; void setMoney(int n) { money=n; } } class A { void f(double y,People p) { y=y+1; p.setMoney(100); System.out.println("参数y的值是:"+y); System.out.println("参数对象p的money是:"+p.money); } } public class ObjectDemo2 { public static void main(String[] args) { double y = 0.8; People zhang =new People(); zhang.setMoney(8888); A a =new A(); System.out.println("在方法f被调用之前对象zhang的money是:"+zhang.money+"y的值是:"+y); a.f(y,zhang); System.out.println("在方法f被调用之后main方法中y的值仍然是:"+y); System.out.println("在方法f被调用之后对象zhang的money是:"+zhang.money); } }
输出结果为:
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流!
----------------------
相关文章推荐
- 黑马程序员-java学习之面向对象上
- 黑马程序员_JAVA学习日记_JAVA中API中Math和Random对象和继承1
- 【黑马程序员】 学习笔记 - Java面向对象
- 黑马程序员学习log第五篇基础知识:JAVA的面向对象之集合总结
- 黑马程序员——学习笔记05.java面向对象
- 黑马程序员_Java学习日记2_面向对象总结1
- 黑马程序员--03.Java面向对象--08.【多态中成员的特点】
- 黑马程序员---java学习笔记之面向对象知识点
- 黑马程序员--Java学习笔记之面向对象思想(单例模式详解、匿名对象、静态、final)
- 黑马程序员学习log第四篇基础知识:JAVA的面向对象之多线程总结
- 黑马程序员_Java学习日记4_面向对象总结3
- 黑马程序员————学习日记【5】 【Java面向对象1】
- 黑马程序员_JAVA学习日记_JAVA中API中对象String类的补充
- 黑马程序员---java学习笔记之面向对象知识点2
- 黑马程序员_Java_I/O流学习——File对象
- 黑马程序员_Java学习日记5_面向对象总结4
- 黑马程序员-java基础学习03-面向对象基础
- 黑马程序员_java面向对象学习笔记
- 黑马程序员学习笔记 JAVA高级视频_其他对象java.lang包中的类System与Runtime
- 黑马程序员---java学习笔记之其他对象