1、类的创建
在 面向对象 这一章中,我们知道了对象的定义、类的定义以及对象和类的关系,则创建对象首先需要创建一个类,创建一个类需要包含如下元素:类名、类属性和类方法
// 先定义一个类名
public class Student {
// 定义类的属性
public String id;
public String name;
public int age;
public char gender;
// 定义类的方法
public void Study() {
System.out.println("好好学习,天天向上");
}
}
2、对象的创建及使用
对象的创建将会经历两个过程:在堆空间创建一个类的空间,再在栈空间声明一个类的引用值并指向该空间
Student stu = new Student();
以创建一个 Student 对象为例,先根据 new 方法,扫描这个类文件是否被加载,若未被加载(或者说在 main 方法中第一次创建该对象),则先进行类的加载、解析、初始化,再根据加载后的类,在堆空间分配一个内存创建一个类空间,最后在栈空间创建一个 Student 类型的引用值指向这个空间,此时类就被创建成功
3、方法的定义
首先,我们需要知道什么是方法,方法是对类某种行为的描述以及概括
其次,我们需要知道,这种行为需要外界传入什么激励才能顺发进行,行为完成的同时是否会反馈内容。根据这些需要,方法被分为:无参方法、有参方法、多参方法以及有返回值的方法
无参方法
即不需要任何参数,就可以完成这个行为
public class Student{
public int id;
public String name;
public void sayHello(){
System.out.printf("Hello,大家好,我叫%s, 我的学号是%d", name, id);
}
}
有参方法、多参方法
即需要一个或多个满足条件的参数才能完成行为的完成
// 有参方法
public class Juicer{
public String brand;
public int volumn;
public void juicing(String fruit){ // 形参
System.out.printf("榨出了一杯%s汁", fruit);
}
}
// 多参方法
public void add(int numA, int numB){
int numbC = numA + numB;
}
带返回值的方法
行为结束后反馈的内容即为返回值,通过 return 关键字实现返回传递
public class Juicer{
public String brand;
public int volumn;
public String juicing2(String fruit){
String juice = fruit + "汁";
return juice;
}
}
4、方法的调用(形参、实参)
根据方法的分类,方法的调用又可以分为无参调用、有参调用、带返回值方法调用(紧承上述代码)
// 无参调用
Student student = new Student();
student.id=100;
student.name="张三";
student.Study();
// 有参调用
Juicer juicer = new Juicer();
String fruit = "苹果"; // 定义的变量名不要求必须与方法定义时的保持一致
juicer.juicing(fruit); // 实参
juicer.juicing("西瓜");
// 带返回值方法调用
Juicer juicer = new Juicer();
String fruit = "苹果";
String juice = juicer.juicing2(fruit);
System.out.println(juice);
这里我们需要知道,方法定义中的 fruit 被称为形参,而方法调用中的 fruit 被称为实参;在传入参数时,并不要求实参和形参的变量名必须一致,可以变化
需要注意的是,当使用带返回值方法调用时,接受返回值的数据类型需要和返回值的数据类型保持一致,否则编译报错
当多参调用时,需要注意参数的顺序必须依照定义标准,否则结果会出错
public void div(int numA, int numB){
int numbC = numA / numB;
}
int a = 2;
int b = 10;
div(a,b); // 0
div(b,a); // 5
5、值传递和址传递
通过 这一章 的介绍,我们已经粗略知道内存的分配规则,那么参数的传递可以根据这一规则划分为值传递和址传递
值传递
根据下面的代码
public void change(int a, int b){
int temp = a;
a = b;
b = temp;
}
int numA = 10;
int numB = 20;
change(numA, numB);
我们简单描绘一个内存分配图
不难看出,值传递时,并不会改变 main() 方法中的变量,如果需要改变 main() 方法中的变量,那么我们需要通过数组来进行实现
址传递
同样,我们先出代码
public void SortBubble(int[] arr) {
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int[] arr = {29,35,63,54,16};
SortBubble(arr);
在进行内存分析