类:表示一个客观世界某类群体的一些基本特征抽象,属于抽象的概念集合,定义出一个基本的操作模板,代表共性的集合。对象表示一个个具体的事物,真正可以使用的个体。
类是对象的模板,对象是类的实例。
成员属性:保存对象的具体特征。
方法:描述功能,例如跑步,吃饭、唱歌。
5.2.1类与对象的定义
类是由成员属性和方法组成
范例:类的定义
public class Seventy { //定义一个类
String name;//成员属性 人的姓名
int age;//成员属性 人的年龄
/**
* 定义一个方法,输出属性
*/
public void tell() {
System.out.println("姓名"+name+" 年龄"+age);
}
}
如果由对象定义时不加static,不是由对象调用的方法加static.
声明并实例化对象:类名称 对象名称 =new 类名称();
对象.成员属性:表明调用类之中的成员属性,可以为其赋值或者获取其保存内容。
对象.方法():表示调用类之中的方法。
package com.lxh.fivachapter;
public class Seventyone {
String name;
int age;
public void tell() {
System.out.println("我叫"+name+", 我今年"+age+"岁了。");
}
public static void main(String[] args) {
Seventyone person=new Seventyone();
person.name="李雷";
person.age=21;
person.tell();
}
}
我叫李雷, 我今年21岁了。
范例:关于类中成员属性的默认值
public class Seventyone02 {
public static void main(String[] args) {
Seventyone person=new Seventyone();
person.tell();
}
}
我叫null, 我今年0岁了。
5.2.2对象内存分析
java中类属于引用数据类型,必须通过new关键字开辟新的内存空间。
类中所有成员属性都是私有的,而类中的方法是所有对象共有的。
范例:对象实例化处理
public class Seventythree {
public static void main(String[] args) {
Seventyone pre=null;
pre=new Seventyone();
pre.age=21;
pre.name="张三";
pre.tell();
}
}
我叫张三, 我今年21岁了。
注意:对象使用前首先必须进行实例化操作
引用数据类型在使用之前进行实例化操作,如果在开发之中出现了以下代码,那么肯定会出现异常
范例:出现异常的代码(空指针异常)
public class Seventytwo {
public static void main(String[] args) {
Seventyone person=null;
person.name="张三";
person.age=21;
person.tell();
}
}
Exception in thread "main" java.lang.NullPointerException
at com.lxh.fivachapter.Seventytwo.main(Seventytwo.java:6)
5.2.3对象引用传递分析
类是引用数据类型,不同的栈内存,可以指向同一块的堆内存空间
范例:引用传递
public class Seventyfive {
public static void main(String[] args) {
Seventyone per=new Seventyone();
per.name="李四";
per.age=23;
Seventyone per2=per;
per2.age =50;
per2.tell();
}
}
我叫李四, 我今年50岁了。
范例:通过方法实现引用传递
public class Seventysix {
public static void main(String[] args) {
Seventyone per=new Seventyone();
per.name="张三";
per.age=18;
chang(per);
per.tell();
}
public static void chang(Seventyone temp) {
temp.age=90;
}
}
我叫张三, 我今年90岁了。
5.2.4引用传递与垃圾产生分析
public class Seventyseven {
public static void main(String[] args) {
Seventyone per1=new Seventyone();
Seventyone per2=new Seventyone();
per1.name="张三";
per1.age=18;
per2.name="李四";
per2.age=20;
per2=per1;
per2.age=80;
per2.tell();
}
}
我叫张三, 我今年80岁了。
实例化两个对象,分别对两个对象进行赋值。由于发生了引用传递“per2=per1”,所以per2将舍弃原始的引用实体(产生垃圾),将引用指向per1实体。这样当执行“per2.age=80”语句修改的就是per1对象的内容,