- 类与对象
- 属性
- 对象的赋值机制
- 方法
- 基本数据的传参机制
- 引用数据类型的传参机制
- 类就是一种自定义数据类型,比如Cat类
- 对象就是一个具体的实例
类和对象的区别和联系:
- 类是抽象的,概念的,代表一类事物,比如人类,猫类,它是数据类型
- 对象是具体的,实际的,代表一个具体事务,即是实例。
- 类是对象的模板,对象是类的一个个体,对应一个实例
对象在内存中的存在形式:
2、属性(成员变量)基本介绍:
- 从概念和叫法上看:成员变量 = 属性 = 字段
- 成员变量是用来表示属性的
- 属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型(对象、数组)。
创建对象访问属性:
-
先声明再创建
Cat cat;//声明对象 cat cat = new Cat();//创建
-
直接创建
Cat cat = new Cat();
-
访问属性
对象名. 属性 cat.name; cat.age;
属性的细节说明:
-
属性的定义语法同变量
示例: 访问修饰符 数据类型 变量名; public String name;
-
属性如果不赋值,有默认值,规则和数组一致
对象引用之间的赋值,会进行对象地址值的拷贝
如下图:p1和p2 指向同一个对象地址
Java内存的结构分析:
- **栈:**一般存放基本数据类型(局部变量)
- **堆:**存放对象(Cat cat,数组等)
- **方法区:**常量池(常量,比如字符串),类加载信息
Java创建对象的流程简单分析:
Person p = new Person(); p.name = "jack"; p.age = 10;
- 先创建Person类信息(属性和方法信息,只会加载一次)
- 在堆中分配空间,进行默认初始化,把地址赋给 p,
- 进行指定初始化,比如 p.name = “jack”;
成员方法 简称 方法,可以理解为 对象的行为
基本语法:
public 返回值类型 方法名(形参列表...){
//语句;
return 返回值;
}
方法的调用机制分析:
4.1 注意事项- 一个方法最多有一个返回值
- 返回类型可以为任意类型,包含基本数据类型或引用数据类型(数组,对象)
- 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为return值,且类型必须一致
- 方法名,遵循小驼峰命名,最好见名知意
- 一个方法可以有0个或多个参数,中间用逗号隔开
- 参数类型可以为任意数据类型
- 方法定义时的参数称为形式参数,简称形参;方法调用时的参数称为实际参数,简称实参。
- 里面要写功能完整的具体语句
- 方法中不能再嵌套方法
- 调用同一个类的方法时:直接调用即可,比如:print();
- 调用不同类的方法时,需要通过对象名调用,比如:对象名.方法名。
- 跨类访问方法,还跟访问修饰符有关。
代码举例:
交换a,b的值
public class MethodParameter01 {
public static void main (String[] args){
int a = 10;
int b = 20;
//创建AA对象
AA obj = new AA();
obj.swap(a,b);
System.out.println("主方法中的值: a=" + a + "b=" + b);
}
}
class AA {
public void swap(int a, int b){
System.out.println("交换前的值: a=" + a + "b=" + b);
int temp = a;
a = b;
b = temp;
System.out.println("交换后的值: a=" + a + "b=" + b);
}
}
结果:
D:SublimeTestCode>java MethodParameter01
交换前的值: a=10 b=20
交换后的值: a=20 b=10
主方法中的值: a=10 b=20
结论:
在Java中,基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!6、引用数据类型的传参机制
代码举例:
//在BBB类中编写一个方法test100
//可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化
public class MethodParameter02 {
public static void main (String[] args){
//定义一个数组
int[] array = {20,40,60,80};
//创建BBB类的对象
BBB obj = new BBB();
//调用方法
obj.test100(array);
System.out.print("主方法中的结果:");
//循环输出array
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}
class BBB{
public void test100(int[] arr){
//修改数组中的数据
arr[1] = 50;
arr[3] = 90;
System.out.print("修改后的结果:");
//循环输出arr
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
输出结果:
D:SublimeTestCode>java MethodParameter02
修改后的结果:20 50 60 90
主方法中的结果:20 50 60 90
结果发现:
主方法中的数组arr的值也被修改了
结论:
引用数据类型传递的是地址值(是对地址值的拷贝),形参会影响实参!



