Java学习笔记---类与对象(2)

final实例域

可以将实例域定义为final,构建对象时必须对它进行初始化,并且在后面的操作中,不能够对它进行修改。

静态域

如果将域定义为static ,每个类只有一个这样的域,而每一个对象对于所有的实例域却都将有自己的一份拷贝,例如:假定给每一个雇员设定一个唯一的标识码nextId,这里给每一个雇员添加一个实例域id和静态域nextId,,现在每一个雇员对象都有自己的id域,但是这些雇员对象却共享一个nextId域。也就是说,如果有1000个雇员对象,那么就有1000个雇员id,但是只有一个静态域nextId。即使没有一个雇员对象,静态域nextId,依然存在。它属于类,而不属于任何独立的对象。

public class Employee {
	private static int nexdId = 1;
	private int id;
}
静态常量

静态变量使用的比较少,但是静态常量使用的比较多,例如:Math类中的

public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;

另外一个使用多次的system.out,在system类中声明,

public static final PrintStream out = null;

这也突然使我意识到一个问题,就是如果一个类中有静态变量,可以直接使用 类.静态变量 的方法去调用它,我觉得是不是因为,这是static的他是属于类的,不属于对象。

静态方法

静态方法是一种不能向对象实施操作的方法,例如Math类中的pow方法,在运算时不使用任何的Math对象,也就是说,没有隐式的参数。
Employee类的静态方法是没有任何this参数的方法,Employee不能访问自身类的实例域,因为它不能操作对象,但是可以访问静态域,

public static int getNextId() {
		return nexdId;
	}

可以通过类名来调用这个方法,当然也可以使用对象来调用这个方法,但是这个方法与该对象没有任何的关系,所以,建议使用类名调用该方法。

工厂方法
方法参数

其他程序设计语言将参数传递给方法有2种方法,按值调用,按引用调用。在Java中总是按值调用。方法参数有2种类型,①基本数据类型;②对象引用。当对象引用时,可以改变将一个基本数据的值发生改变,例如:

public static void tripValue(Employee e) {
		e.salary = e.salary * 3;
	}

当调用这个方法是slary的值将会×3,实现一个改变对象数据参数状态的方法并不是一件难事。方法得到的是对象的拷贝,对象引用以及其他都将引用同一个对象。这看似好像是按引用调用,实际上还是按值调用的,下面看一个例子:

public static void swap(Employee a , Employee b) {
		Employee temp = a;
		a = b;
		b = temp;
	}

这是一个交换的函数,如果是按引用调用的,那么对象a,b 的值将会交换,但实际上并没有交换。

public static void main(String[] agrs) {
		Employee a = new Employee("ab" , 100);
		Employee b = new Employee("cd" , 200);
		swap(a , b);
		System.out.println(a.getName() + "\n" + a.getSalary());
	}

在这里插入图片描述
实际上,对象引用是按值传递的。
Java中的方法参数使用情况:
①一个方法不能修改一个基本数据类型的参数;
②一个方法可以改变一个对象参数的状态;
③一个方法不能让对象参数引用一个新的对象

对象构造
发布了40 篇原创文章 · 获赞 9 · 访问量 3289

猜你喜欢

转载自blog.csdn.net/weixin_44706647/article/details/101798986
今日推荐