3月5日 java核心技术读书笔记

2020年3月5日16:55:21

注意构造器和C++中结构体的不同,为了防止错误,不应该写实例域。而且更不要将变量的命名与实例域重名。

 

隐式参数与显式参数

public void raiseSalary(double byPercent) { 
double raise = salary * byPercent / 100; 
salary += raise; 
}

这个里面,double byPercent就是显式参数,它是明显地显示在方法声明的,而salary就是隐式参数,它并没有在方法中声明,但是它参与了方法,它出现在方法名的前面的某个类里面。类似于C++中较为大一点的局部变量(全局变量)。

 

2020年3月5日18:13:58

4.3.6中警告的内容涉及了,对象封装不好的弊端。

Employee harry = .....;
Date d = harry.getHireDate();
double tenYearsInMilliSeconds  = 10 * 365.25 * 24 * 60 * 60 * 1000 ;
d.setTime ( d.getTime () - ( long ) tenYearsInMilliSeconds ) ;

上面这个就是错误的,我没看懂这个代码啥意思。应该是d这个量减去十年

根据书上的叙述来说,主要问题是,对象的多方位更改,意思就是d这个变量能够直接更改这个harry.hireDay,造成了错误,这个不难理解,后面继续学习感悟。

 

2020年3月5日18:22:41

类的访问权限这个地方,意思就是说类里面的方法可以访问类里面的所有对象。

 

私有方法,这个地方,简单来说就是仅仅这类中可以使用这个方法,其他类是不能使用这个方法的。

这个final这个地方试了一下。

package test;
import java.time.*;

public class EmployeeTest{
	public static void main(String[] args) {
		Employee[] staff = new Employee[3];
		
		staff [ 0 ] = new Employee ( " Carl Cracker " , 75000 , 1987 , 12 , 15 ) ;
		staff [ 1 ] = new Employee ( " Carl Cracker1 " , 75000 , 1984 , 12 , 1 ) ;
		staff [ 2 ] = new Employee ( " Carl Cracker2" , 7500 , 1986 , 1 , 1 ) ;
		Employee tmp = new Employee("sssss", 75000 , 1987 , 12 , 15);
		System.out.println("name = " + tmp.getName() + ",salary = " + tmp.getSalary() + ",hireDay = " + tmp.getHireDay());
		tmp.changeName("qwerw");
		System.out.println("name = " + tmp.getName() + ",salary = " + tmp.getSalary() + ",hireDay = " + tmp.getHireDay());
//		for(Employee e : staff) {
//			e.raiseSalary(5);
//			System.out.println("name = " + e.getName() + ",salary = " + e.getSalary() + ",hireDay = " + e.getHireDay());
//		}
}
}
class Employee{
	private String name;
	private double salary;
	private LocalDate hireDay;
	public void changeName(String n) {
		name = n;
	}
	public  Employee(String n,double s, int year, int month, int day) {
		name = n;
		salary = s;
		hireDay = LocalDate.of(year,month,day);
	}
	public String getName() {
		return name;
	}
	public double getSalary() {
		return salary;
	}
	public LocalDate getHireDay(){
		return hireDay;
	}
	public void raiseSalary(double byPercent) {
		double raise  = salary * byPercent / 100;
		salary += raise;
	}
}

在之前的代码上面加上了private String name;,这是可以实现的。(sssss变成了qwerw)

但是我们如果这样设置name

private final String name;

changeName的方法将会报错,也就是说name这个值将无法更改

 

这里就是有个小插曲是,关于日期的报错:

Employee tmp = new Employee("sssss", 75000 , 0, 0 , 0);

这时候是会出错的,而且是编译的时候出错,因为0这个数值无法对应月份。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值