7_类和对象
目录
面向对象的概念
-
万物皆对象。
-
面向对象指以属性和行为的观点去分析现实生活中的事物。
-
面向对象编程指先以面向对象的思想进行分析,然后使用面向对象的编程语言进行表达的过程。
类和对象的概念
- 对象主要指现实生活中客观存在的实体,在Java语言中对象体现为内存空间的一块存储区域。
- 类简单来就是“分类”,是对具有相同特征和行为的多个对象共性的抽象描述,在Java语言中体现为一种引用数据类型,里面包含了描述特征/属性的成员变量以及描述行为的成员方法。
- 类是用于构建对象的模板,对象的数据结构由定义它的类来决定。
类的定义
class 类名 {
类体;
}
- 通常情况下,当类名由多个单词组成时,要求每个单词首字母都要大写。
成员变量的定义
class 类名 {
数据类型 成员变量名 = 初始值;
}
- 当成员变量由多个单词组成时,通常要求从第二个单词起每个单词的首字母大写。
对象的创建
new 类名();
- 当一个类定义完毕后,可以使用new关键字来创建该类的对象,这个过程叫做类的实例化。
- 创建对象的本质就是在内存空间的堆区申请一块存储区域,用于存放该对象独有的特征信息。
引用的定义
-
基本概念
- 使用引用数据类型定义的变量叫做引用型变量,简称为“引用”。
- 引用变量主要用于记录对象在堆区中的内存地址信息,便于下次访问。
-
语法格式
-
类名 用于变量名; 引用变量名.成员变量名
-
Person p = new Person; p.name = "吕布"; System.out.println(p.name);
-
实例
/*
编程实现Person类的定义
*/
public class Person {
// 数据类型 成员变量名 = 初始值; - 其中,初始值通常省略不写
String name; // 用于描述姓名的成员变量
int age; // 用于描述年龄的成员变量
public static void main(String[] args) {
Person p = new Person();
System.out.println("我是" + p.name + ",今年" + p.age + "岁了!");
p.name = "张飞";
p.age = 30;
System.out.println("我是" + p.name + ",今年" + p.age + "岁了!");
}
}
/*
编程实现Person类的定义
*/
public class Point {
int x;
int y;
public static viod main(String[] aargs) {
Point p = new Point();
System.out.println("横坐标是:" + p.x + ",纵坐标是:" + p.y);
System.out.println("--------------------");
p.x = 3;
p.y = 5;
System.out.println("横坐标是:" + p.x + ",纵坐标是:" + p.y);
}
}
成员方法的定义
class 类名 {
返回值类型 成员方法名(形参列表){
成员方法体;
}
}
- 当成员方法由多个单词组成时,要求从第二个单词起每个单词的首字母大写。
返回值类型的详解
- 返回值主要指从方法体内返回到方法体外的数据类型。
- 返回值类型主要指返回值的数据类型,可以是基本数据类型,也可以是引用数据类型。
- 当返回的数据内容是66时,则返回值类型写int即可。
- 在方法体中使用return关键字可以 返回具体的数据内容并结束当前方法。
- 当该方法不需要返回任何数据内容时,则返回值类型写void即可。
形参列表的详解
- 形式参数主要用于将方法体外的数据内容带入到方法体内部。
- 形式参数列表主要指多个形式参数组成的列表。
方法体详解
- 成员方法体主要用于编写描述该方法功能的语句块。
- 成员方法可以实现代码的重用
类中可变长参数的使用
返回值类型 方法名(参数的类型... 参数名)
- 方法参数部分指定类型的参数个数是可以改变的,也就是0~n个。
- 一个方法的形参列表中最多只能声明一个可变长形参,并且需要放到参数列表的末尾。
public class Person {
String name;
int age;
void setName(String n) {
name = n;
}
void setAge(int a) {
age = a;
}
void show() {
System.out.println("我是" + name + ",今年" + age + "岁了!");
}
void setNameAge(String n, int a) {
name = n;
age = a;
}
void showArgument(int num, String... args) {
for (int i = 0; i < args.length; i++) {
System.out.println("第" + (i +1) + "个参数为:" + args[i]);
}
}
public static void main(String[] args) {
Person p = new Person();
p.show();
System.out.println("----------------------------");
p.name = "zhangfei";
p.age = 30;
p.show();
System.out.println("----------------------------");
}
}
无参有返回值方法
public class Person {
String name;
int age;
String getName() {
return name;
}
int getAge() {
return age;
}
void show() {
System.out.println("我是" + name + ",今年" + age + "岁了!");
}
public static viod main (String[] args) {
String str1 = p.getName();
System.out.println("获取到的姓名是:" + str1);
int ib = p.getAge();
System.out.println("获取到的年龄是:" + ib);
}
}
方法的传参过程
参数传递的注意事项
- 基本数据类型的变量作为方法的参数传递是,形参变量数值的改变通常不会影响到实参变量的数值,因为两个变量有各自独立的内存空间。
- 引用数据类型的变量作为方法的参数传递是,形参变量指向内容的改变会影响到实参变量指向内容的数值,因为两个变量指向同一块内存空间。
- 当引用数据类型的变量作为方法的参数传递是,若形参变量改变指向后再改变指定的内容,则通常不会影响到实参变量指向内容的改变,因为两个变量指向不同的内存空间。