注
- 参考《java核心技术卷一》
写在前面
从控制流程到面向对象跨度稍微有一些大,一些循环语句都没有专门的详细解释,这个作为个人的blog输出,肯定是不如书本上,或者那些视频教程那么详尽,所以需要专业学习的可以去找相关书籍或者相关教程去系统学习这一门编程,我这里只是挑选一些主要内容以及平时可能常用,又或者一些需要深入理解的知识点去描述,谢谢。哈,你问我有哪些经典的入门书籍,那当然就是我的blog一直在用的参考书籍《java核心技术卷一》,视频的话马士兵、韩顺平等等作者的都可以。
面向对象
什么是对象?(看到这里你是不是马上看了一眼手机里女朋友的照片,心想这不就是我对象。。。额,咳咳,这么说其实也没错)我们找到维基百科里面计算机术语里面的对象解释:
是一个记忆体位址,其中拥有值,这个位址可能有标识符指向此处。物件可以是一个变数,一个资料结构,或是一个函式。是面向对象(Object Oriented)中的术语,既表示客观世界问题空间(Namespace)中的某个具体的事物,又表示软件系统解空间中的基本元素。
这解释很官方很科学,讲道理我看着也不是很深刻,如果我是第一次学这个我一定看不懂这讲得啥玩意。我们具体看一看其中‘表示客观世界问题 空间中的某个具体事物’,这一句其实就是想说明一个对象,其实在设计程序的时候就是解决生活中的工作中的问题的,所以这个对象就是代指客观世界中的某种东西,比如说动物、猫科动物、狮子、老虎、猫,无论是动物还是狮子都是一种对象,他们都是客观存在的。所以我们在程序里面用代码来也就是空间中的基本元素来表示这个对象。书中给了这样的例子:
import java.util.GregorianCalendar;
/**
* Employee
*/
public class Employee {
private String name;
private double salary;
private Date hireDay;
//constructor
public Employee(String n, double s, int year, int month, int day) {
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
public void setSalary(double s) {
salary = s;
}
public double getSalary() {
return salary;
}
}
这是一个类,这个类用员工的 名称来表示一个员工,里面有员工的姓名,员工的薪水,以及员工的工龄,这样就表示了一个对象,里面有一个跟这个类同名的方法,就是这个类的构造函数,当这个类被实例化的时候就会调用构造函数。调用这个类,我们只需要用new关键字,将这个类进行实例化就可以调用了。
Employee employee = new Employee('Tom', 6000, 1987, 12, 15)//实例化就会直接调用构造函数
employee.getName(); //‘Tom’
employee.getSalary();
这样是不是就明白了一点呢。
剖析employee类
1.构造器
public Employee(String n, double s, int year, int month, int day) {
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
构造器,所谓构造器就是,当创建这个类实例的时候就执行的代码,类似初始化的意思:
new Employee('Tom', 100000, 1999, 1, 20);
new关键字用来实例化这个对象,那么这个对象就可以使用了,实例化的时候初始化了实例中的一些变量,将这些变量设置为:
name = 'Tom';
salary = 100000;
hireDay = January 20, 1999;
注意‘构造器总是被new操作符执行而被调用’,所以一定不过对一个已经存在的对象调用构造器来达到重新设计实例域的目的(这句话也有点拗口哇),来看一个例子:
Employee e = new Employee('Tom', 100000, 1999, 1, 20);
e.Employee('Tom', 100000, 1999, 1, 20);//这样是错误的
上面实例化了employee类之后有调用了一次构造器方法,这样是错误的。
2.隐式参数和显示参数
public void raiseSalary(double byPrecent) {
double raise = salary * byPrecent / 100;
salary += raise;
}
上面这一个employee类里面的一个方法,其实整个方法里面都有一个this
来指向这个这个对象里面的方法以及变量,比如:
public void raiseSalary(double byPrecent) {
double raise = this.salary * byPrecent / 100;
this.salary += raise;
}
这样加上了这个this就可以显式的表示上面定义的这个salary这个变量,而这个方法里面的double bePrecent 就是这个方法的隐式参数。
3.类的私有权限访问
public private 公有和私有的,大部分时候这个类方法需要暴露出来的方法应该为公有,而不需要暴露出来的内部方法就应当全部私有,这样不容易让人产生误解。以及所有的变量都应该私有,然后用get set访问器来处理这边变量的访问以及赋值。set get方法相当于变量的过滤器,可以直接在使用的时候对这个变量进行数值的处理过滤,而且更改器方法会执行错误检查,所以这样的方法好处多多,尽量去符合这样的规范去处理一个类。