1.概述
Java语言是一种面向对象的程序设计语言,而面向对象思想(OOP)是一种程序设计思想,在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。
面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。它区别于面向过程思想(POP),强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。面向对象的语言中,包含了三大基本特征,即封装、继承和多态。
2.类和对象
2.1 什么是类?
- 类:是一类具有相同特性的事物的抽象描述,是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
现实中,描述一类事物:
- 属性:就是该事物的状态信息。
- 行为:就是该事物能够做什么。
举例:小猫。
属性:名字、体重、年龄、颜色。
行为:走、跑、叫。
2.2 什么是对象?
- 对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。现实中,一类事物的一个实例:一只小猫 。
- 属性:tom、5kg、2 years、yellow。
- 行为:溜墙根走、蹦跶的跑、喵喵叫。
2.3 类与对象关系
- 类是对一类事物的描述,是抽象的,概念的;比如人类,猫类…, 即它是数据类型。
- 对象是一类事物的实例,是具体的, 即是实例。
- 类是对象的模板,对象是类的实体。
2.4 对象在内存中的存在形式
3.类的定义和对象的创建
Java中用class描述事物也是如此:
- 成员变量:对应事物的属性。[成员变量=属性=field(字段)]
- 成员方法:对应事物的行为
3.1 类的创建
类的定义格式:
public class ClassName{
//成员变量
//成员方法
}
- 定义类:定义类的成员,包括成员变量和成员方法。
- 成员变量:和定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
- 成员方法:和main方法格式类似。只不过功能和形式更丰富了。
public class Person{
//成员变量
String name; //姓名
int age; // 年龄
boolean isMarried;
public void walk(){
System.out.println("人走路...")
}
public String display(){
return "名字:"+ name + ",年龄:" + age + ",Married:" + isMarried;
}
}
3.2 对象的创建
对象的定义格式
new 类名() // 匿名对象
// 把创建的对象用一个引用数据类型的变量保存起来
类型 对象名 = new 类名();
Q:对象名中存储的是什么? A: 对象地址
//如果两个类都在一个.java源文件中,只能有一个类是public的
class Student{
}
public class TestStudent{
//Java程序的入口
public static void main(String[] args){
System.out.println(new Student());//JavaBase.Student@4554617c
Student stu = new Student();
System.out.println(stu);//JavaBase.Student@74a14482
int[] arr = new int[5];
System.out.println(arr);//[I@1540e19d
}
}
从上述的运行结果可以看出, 学生对象和数组对象类似,直接打印对象名和数组名都是显示“类型@对象的hashCode值",所以类、数组都是引用数据类型,引用数据类型的变量中存储的是对象的地址,或者说指向堆中对象的首地址。
3.3 类和对象的内存分配机制
Java 内存的结构分析:
-
- 栈: 一般存放基本数据类型(局部变量)
-
- 堆: 存放对象(Cat cat , 数组等)
-
- 方法区:常量池(常量,比如字符串), 类加载信息
示例:
public class TestCat {
public static void main(String[] args) {
Cat cat = new Cat();
cat.name = "小花";
cat.age = 3;
cat.color = "白色";
System.out.println("小猫信息" + cat.name
+ " " + cat.age + " " + cat.color);
}
}
3.4 成员变量
3.4.1 成员变量分类
- 实例变量:没有static修饰,也叫对象属性,属于某个对象的。
- 静态变量:有static修饰,也叫类变量,属于整个类的,不是属于某个实例。
3.4.2 成员变量的定义
【修饰符】 class 类名{
【修饰符】 数据类型 属性名; // 属性有默认值
【修饰符】 数据类型 属性名 = 值; // 属性有初始值
}
例:声明一个中国人
class Chinese{
static String country;
String name;
char gender = '男'; // 显式赋值
}
3.4.3 成员变量的访问
1.类变量
类名.静态成员变量 //推荐
对象名.静态成员变量 //不推荐
2.实例变量
对象名.普通成员变量 //只能使用这种方式
public class TestChinese{
public static void main(String[] args){
// 类变量的访问方式:类名.静态成员变量
System.out.println(Chinese.country)
Chinese c1 = new Chinese();
//对象名.普通成员变量
System.out.println(c1.name);
//静态的成员变量也可以通过对象.进行访问
//对象名.普通成员变量
System.out.println(c1.country);
System.out.println(c1.gender);
}
}
class Chinese{
static String country;
String name;
char gender = '男';
}
3.4.4 成员变量的特点
1.成员变量有默认值
基本类型 | 整数(byte,short,int,long) | 0 |
---|---|---|
浮点数(float,double) | 0.0 | |
字符(char) | ‘\u0000’ | |
布尔(boolean) | false | |
引用类型 | 数组,类,接口 | null |
2.类变量的值是所有对象共享,而实例变量的值是属于每个对象
public class TestChinese {
public static void main(String[