类与对象
关于类与对象,有下面一些话需要理解
对象=属性+方法,对象拥有一些属性,可以对对象进行一些操作(方法)
类是对对象内容、方法的声明、定义及初始化
类是创建对象的模板
对象变量是对象的管理者,而不是所有者
写在类里的成员变量,仅仅只是声明,变量不在类里,变量在每一个对象里
类
成员变量
成员变量与本地变量十分相似
成员变量的生存期是对象的生存期,作用域是类内部的成员函数。
成员变量会自动初始化为“零”值,比如 类型为 boolean 时,初始化为false,如果是一个对象变量则初始化为null。方法(函数)
在类中进行定义,属于该类的对象可以根据定义来使用这样的方法,这些方法作用于调用他的对象构造函数
构造函数没有返回类型
成员函数的名字和类的名字完全相同,那么在创建这个类的对象时会自动调用这个函数,在初始化完成员变量后(这保证了我们可以在构造函数中初始化成员变量)
构造函数也确确实实是一个函数,可使用重载特性
对象
制造对象,即将类中的声明实体化
类是制造对象的模板
对象可以调用所在类中的方法
实例
import java.lang.*;
import java.util.*;
class student {
public String name;
public int[] score = new int[5];
public String stunum;
public void setName(String name) {
this.name = name;
}//此处this.表示该变量"name"是对象中的name变量,而后面
//一个"name"则是方法的参数"name"
public void setStunum(String stunum) {
this.stunum = stunum;
}
public void print() {
System.out.print(name);
for (int k : score) {
System.out.print(k);
}
System.out.println(stunum);
}
//构造函数 当我们制造一个对象时可以调用 class obj = new class()
student() {
for (int i = 0; i < 5; i++) {
score[i]=i;
}
}
student(int a){
this();//调用student()
score[0]=a;
}//函数重载
//本例中根据制造对象时所传参数选择执行哪个构造函数
student(char a){
this(5);//调用student(int a)
score[0]=a;
}
//构造函数因为与类同名,相当于没有自己的名字,构造函数
//重载时可且仅可在第一句通过this();根据参数调用其他
//构造函数
}
public class Main {
public static void main(String[] args) {
String a="abc";
student stu1 = new student();
stu1.setName("王等闲");
stu1.print();
student stu2 = new student(5);
stu2.print();
student stu3 = new student(a);
stu3.print();
stu3.name=stu3.name.toUpperCase();
stu3.print();
}
}
//输出为
王等闲01234null
null51234null
abc51234null
ABC51234null
封装
封装:把属性和方法(对属性的操作)放在一起组成类,并且用这些操作把属性掩盖起来,封装是面向对象的基本概念之一
保证在类的设计的时候做到封装:
- 所有的成员变量必须是private的,这样就避免别人任意使用你的内部数据;
- 所有public的函数,只是用来实现这个类的对象或类自己要提供的服务的,而不是用来直接访问数据。除非对数据的访问就是这个类及对象的服务。简单地说,给每个成员变量提供一对用于读写的get/set函数也是不合适的设计。
理解OOP特性:
- 一切都是对象
- 程序就是相互发送消息的对象的集合
- 每个对象都有自己的存储空间,里面是其他对象
- 每个对象都有一个类型
- 所有属于某个特定类型的对象可以使用相同的方法
2018/5/29