java08基础(值传递和引用传递 类和对象)

发布于:2024-05-07 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

一. 值传递和引用传递

1. 值传递

2. 引用传递 

二. 面向对象思想

三. 类和对象

1. 类

2. 对象

2.1 使用

2.2 成员变量和局部变量区别

 2.3 操作成员方法

 2.4 this关键字(初始)

2.5 构造方法 (见java09)


一. 值传递和引用传递

1. 值传递

值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数.

public static void main(String[] args) {
		int num1 = 10;
		int num2 = 20;
		swap(num1, num2);
		System.out.println("num1:" + num1 + "num2:" + num2);
	}

	// 值传递
	public static void swap(int a, int b) {
		System.out.println("进入swap的a:" + a + "b:" + b);
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
		System.out.println("结束的时候swap的a" + a + "b:" + b);
	}

2. 引用传递 

引用传递是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

示例1:

public static void main(String[] args) {
		// 测试引用传递
		int[] ns = { 1, 2, 3, 4 };
		System.out.println("main开始前" + Arrays.toString(ns));
		swap(ns);
		System.out.println("main结束" + Arrays.toString(ns));
	}

	public static void swap(int[] ns1) {
		System.out.println("数组里的内容" + ns1);
		System.out.println("数组里的值" + Arrays.toString(ns1));
		if (ns1.length >= 2) {
			ns1[0] = ns1[0] ^ ns1[ns1.length - 1];
			ns1[ns1.length - 1] = ns1[0] ^ ns1[ns1.length - 1];
			ns1[0] = ns1[0] ^ ns1[ns1.length - 1];
		}
		System.out.println("操作后的数组内容" + Arrays.toString(ns1));
	}


 示例2:

public static void main(String[] args) {
		int[] ns1 = { 1, 2, 3, 4 };
		int[] ns2 = { 22, 33 };
		swap(ns1, ns2);
		System.out.println(Arrays.toString(ns1));
		System.out.println(Arrays.toString(ns2));

	}

	public static void swap(int[] ns1, int[] ns2) {
		int[] temp = ns1;
		ns1 = ns2;
		ns2 = temp;
		System.out.println(Arrays.toString(ns1));
		System.out.println(Arrays.toString(ns2));
	}

 

二. 面向对象思想

●什么是面向过程,什么是面向对象

●面向过程:亲力亲为

●面向对象:找人帮忙

三. 类和对象

●类:是对某一类事物的统称,比如举例人

●对象:是这一类事物中具体的个体。

类的基本组成部分:

属性:对类的静态描述(成员变量)

行为:这个类能干什么(方法)

类和对象的关系

●类是抽象的

●对象是具体的

总结:类是对象的抽象,对象是类的具体。

1. 类

语法规则:

修饰符 class 类名{
 		field;成员属性/全局变量
 		method;方法
}
        //修饰符:public
        //class: 修饰类的关键字
        //类名:标识符,大驼峰命名法
成员属性:修饰符  数据类型    变量名;
                      修饰符 ---public公共的,privated私有的
                      数据类型---任意数据类型均可
                      变量名---见名知意

2. 对象

对象的创建:

●导包:import 包名.类名(同包下的类不用导包,java.lang包下的类不用导包)

●位置:放在类的上面,package的下面。

语法:

import 包名.类名

[注]:
●要使用的类和当前的类在同一个包下面,可以省略导包。
●使用java.lang包下的类,可以省略导包string,System


      类名  对象名 = new 类名()

●对象名:标识符,小驼峰 和变量名命名一致

2.1 使用

操作成员变量:

调用属性:
  		赋值:对象名.属性名 = 值
 		取值:数据类型 变量名 = 对象名.属性名

●数据类型和成员变量名一致即可
●成员变量有默认值,基本数据类型和默认值一样。

public class Person {
	// 属性
	public String name;
	public int age;
}
Person p1 = new Person();
		p1.name = "zkt";
		p1.age = 20;

●操作成员变量的时候,有可能会出现非法赋值;

●可以不让外部直接访问成员变量,将成员变量私有化(private)

提供getXXX()获取成员变量,方法有返回值

提供setXXX(数据类型  参数)给成员变量赋值,有参数

//有返回值,取值
	public int getAge() {
		return age;
	}

	//有参数,赋值
	//局部变量和全局变量发生重名的时候,优先使用局部变量
	//成员变量前面加this关键字--强调当前的变量是成员变量
	public void setAge(int age) {
		if (age < 0 || age > 140) {
			System.out.println("输入年龄有误");
		} else {
			this.age = age;
		}

2.2 成员变量和局部变量区别

区别 成员变量 局部变量
类中位置不同 类内,方法外 方法中
初始化值不同 有默认初始化值,同数组一样 没有默认初始化值,使用之前必须完成赋值
内存位置不同 堆内存 栈内存
生命周期不同

在堆的内部,随着对象的产生而产生,随着对象被垃圾回收机制回收而消亡

随着方法的产生而创建,栈内,方法出栈,局部变量消亡。生命周期较短

作用域 成员方法中

 2.3 操作成员方法

调用成员方法:
      	对象名.方法名(参数)---无返回的值方法调用
       	数据类型  变量名 = 对象名.方法名(参数)---有返回的值方法调用
public class Person {
	// 属性
	public String name;
	
	//操作成员变量的时候,有可能会出现非法赋值;
	//可以不让外部直接访问成员变量,将成员变量私有化(private)
	//提供getXXX()获取成员变量,方法有返回值
	//提供setXXX(数据类型  参数)给成员变量赋值,有参数
	private int age;

	// 方法
	public void study(String name) {
		System.out.println(name + "喜欢学习");
	}

	public String eat(String sth) {
		return name + "中午要吃" + sth;
	}
	
	//有返回值,取值
	public int getAge() {
		return age;
	}

	//有参数,赋值
	//局部变量和全局变量发生重名的时候,优先使用局部变量
	//成员变量前面加this关键字--强调当前的变量是成员变量
	public void setAge(int age) {
		if (age < 0 || age > 140) {
			System.out.println("输入年龄有误");
		} else {
			this.age = age;
		}
	}
}
public class Demo02 {
	public static void main(String[] args) {
		Person p1 = new Person();
		p1.name = "zkt";
		System.out.println(p1.name);
		p1.study();
		String str1 = p1.eat("红烧肉");
		System.out.println(str1);
	}
}

 2.4 this关键字(初始)

当局部变量和成员变量重名时,Java一般选择就近原则,优先使用局部变量。非要使用成员变量,就需要使用this关键字进行区分。

class Student {
    int num = 10;
    
    public void show(){
        int num = 20;
        System.out.println(num);        // 20  局部变量
        System.out.println(this.num);   // 10   成员变量
    }
}

this含义: 当前对象的引用,谁调用谁就是this

用法:

this.成员变量
this.成员方法
this() 调用构造函数 放在代码第一行

2.5 构造方法 (见java09)