文章目录
java类和对象及引用详细解析
类和对象以及引用
类的定义
class 类名 {
类体;
}
-
注意
通常情况下,当类名由多个单词组成时,要求每个单词首字母都要大写(大驼峰命名法)
因为类的本质是数据类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作
-
代码显示 (将学生转化类)
class Student{ // 表示学生类 }
成员属性的定义
class 类名 {
数据类型 成员变量名 = 初始值; //其中 = 初始值; 一般省略不写
}
-
注意
当成员属性由多个单词组成时,通常要求从第二个单词起每个单词的首 字母大写
数据类型 成员变量名
= 初始值; 一般省略初始化
成员属性的初始值
-
对象创建后,其成员变量可以按照默认的方式初始化,具体规则如下
成员属性的类型 默认初始值 数值类型 byte、short、int、long、float、double、char 0 boolean型 false 引用类型 null -
代码显示 (将学生转化类)
class Student{ // 表示学生类 // 学生类的属性也叫学生类的成员变量/成员属性 String name; // 代表学生类的名字 int age; // 代表学生类的年龄 String classN; // 代表学生年级 }
对象的创建
-
对象的概念
类的实例称为对象
-
代码演示
new 类名();
-
注意(所有 new 出来的东西都存储在 堆内存中)
当一个类定义完毕后,可以使用new关键字来创建该类的对象,这个过程叫做类的实例化创建对象的本质就是在内存空间的堆区申请一块存储区域, 用于存放该对象独有特征信息
-
代码演示(创建学生类对象)
new Student(); // 匿名对象
- 注意 在类的实例化过程中(生成对象时),类已经别创建,否则编译报错
引用的定义
-
基本概念
使用引用数据类型定义的变量叫做引用型变量,简称为"引用"
引用变量主要用于记录对象在堆区中的内存地址信息,便于下次访问
-
语法格式
类名 引用变量名; 引用变量名.成员变量名;
-
代码演示
Student student = new Student(); //Student类的实例化 student.name = "李华"; // Student类中的成员属性命名为张三 System.out.println(student.name); // 打印Student类的成员属性nam e
成员方法
成员方法的定义
-
成员方法的格式
class 类名 { 返回值类型 成员方法名(形参列表) { // 返回值类型 和 形参列表 在下面会提到 成员方法体; } }
-
注意
当成员方法名由多个单词组成时,要求从第二个单词起每个单词的首字母大写
如果有多个功能修改 建议一个一个功能的建立 这样可以降低功能之间的耦合性
-
class Sutdent{ void print(){ System.out.println("java对象多,何求异性") } }
返回值类型的详解
-
返回值主要指从方法体内返回到方法体外的数据内容。
-
返回值类型主要指返回值的数据类型,可以是基本数据类型,也可以是 引用数据类型
-
在方法体中使用return关键字可以返回具体的数据内容并结束当前方法。
-
例如
当返回的数据类型是int 返回值内容(也可以是整型变量)是857时,则方法体中写 return 857; 即可
形参列表的详解
-
形式参数主要用于将方法体外的数据内容带入到方法体内部
-
形式参数列表主要指多个形式参数组成的列表,语法格式如下
数据类型 形参变量名1, 数据类型 形参变量名2, ...
-
若该方法不需要带入任何数据内容时,则形参列表位置为空
-
例如
- 当带入的数据内容是"java"时,则形参列表写 String s 即可
- 当带入的数据内容是857和"java"时,则形参列表写 int i, String s 即可
方法体的详解
- 成员方法体主要用于编写描述该方法功能的语句块。
- 成员方法可以实现代码的重用,简化代码
方法的调用
-
语法格式
引用变量名.成员方法名(实参列表)
-
实际参数列表主要用于对形式参数列表进行初始化操作,因此参数的个 数、类型以及顺序都要完全一致
-
实际参数可以传递直接量、变量、表达式、方法的调用等
-
调用方法的本质就是 在方法调用位置进行方法的跳转(本质就是将方法调入栈内存空间中 也叫方法压栈,方法执行完后 方法出栈 也叫方法弹出)
-
栈内存顾名思义 就是按照栈的数据结构构建的 栈的数据结构就是先进后出 相当于往纸箱里面放书(一本一本的放 一本一本的取)
可变长参数
-
语法格式
返回值类型 方法名(参数的类型... 参数名)
-
方法参数部分指定类型的参数个数是可以改变的,也就是0~n个
-
一个方法的形参列表中最多只能声明一个可变长形参,并且需要放到参 数列表的末尾
-
可变长参数 可以按照一维数组来使用 输入时提示用户输入顺序
-
代码演示
-
public class Student{ String[] name; int age; String[] setMainObject(int i, String... s){ // 注意一个方法体内只能有一个可变长参数 并且只能在参数类别最后 age = i; // 此处使用age 不会报错 因为name在此Student类中是是全局变量 // 将方法传入的数据转存到 name数组中 for(int i = 0; i < s.length; i++) { name[i] = s[i] } // 返回 name数组 return name; } }
方法的传参过程
- 图示解释
参数传递的注意事项
- 基本数据类型的变量作为方法的参数传递时,形参变量数值的改变通常 不会影响到实参变量的数值,因为两个变量有各自独立的内存空间
- 引用数据类型的变量作为方法的参数传递时,形参变量指向内容的改变 会影响到实参变量指向内容的数值,因为两个变量指向同一块内存空间
- 当引用数据类型的变量作为方法的参数传递时,若形参变量改变指向后 再改变指定的内容,则通常不会影响到实参变量指向内容的改变,因为 两个变量指向不同的内存空间
内存结构之栈区
- 栈用于存放程序运行过程当中所有的局部变量。一个运行的Java程序从开 始到结束会有多次方法的调用
- JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为该 方法的栈帧。一个栈帧对应一个正在调用中的方法,栈帧中存储了该方 法的参数、局部变量等数据
- 当某一个方法调用完成后,其对应的栈帧将被清除
传参的相关概念
- 参数分为形参和实参,定义方法时的参数叫形参,调用方法时传递的参 数叫实参
- 调用方法时采用值传递把实参传递给形参,方法内部其实是在使用形参
- 所谓值传递就是当参数是基本类型时,传递参数的值,比如传递i=100, 真实传参时,把100赋值给了形参。当参数是对象时,传递的是对象的值, 也就是把对象的地址赋值给形参