JAVA的类与对象
语言的进化
- 机器语言
- 汇编语言
- 高级语言
- 面向过程(程序=算法+数据)
- 面向对象(程序=对象+消息)
面向对象
封装
- 将数据和对数据的操作封装在一个对象中,并且对对象的使用者隐藏数据的实现过程。
继承
- 通过抽象,抽取出某一类的多个对象的共同特性,形成“类”。子类可以继承父类的属性及功能,并能够拓展。
多态
- 方法的多态
- 多个操作可具有相同的名字,但方法接收的参数必须不同。
- 继承的多态
- 同一个操作被不同类型对象调用时,可产生不同的行为。
类
// 类的声明
[public][abstract|final]class 类名称
[extends 父类名称]
[implements 接口名称列表]
// 类的内容
{
// 变量定义:刻画属性
[public|protected|private] // 访问控制符
[static] // 指明这是一个静态成员变量
[final] // 指明变量的值不能被修改
变量数据类型 变量名[=变量初值];
// 方法定义:刻画功能
[public|protected|private]
[static]
[final]
[abstract]
返回类型 方法名([参数列表])[throws exceprtionList]{
// 方法体
}
}
// 定义钟表类
public class Clock{
// 成员变量
int hour;
int minute;
int second;
// 成员方法
public void setTime(int newH, int newM, int newS){
hour = newH;
minute = newM;
second = newS;
}
}
class 梯形{
float 上底,下底,高; // 成员变量
float 计算面积(){
float area = (上底+下底)*高/2.0f; // 局部变量
return area;
}
}
class Puppy{
String name; // 实例变量
static String wof = "汪汪~~"; // 静态变量,有static修饰
}
- 冲突的情况
- 成员变量被隐藏
- 局部变量与成员变量名称相同
- 方法参数与成员变量名称相同
- 调用成员变量
- 使用this关键字:this代表调用该方法的当前对象
class Puppy{
String name = "旺财";
void 关门放狗(){
String name = "Tiger";
System.out.println(this.name+",咬他!");
}
void 关门放狗(String name){
System.out.println(this.name+",咬他!");
}
}
- 方法重载
- 一个类中可以有多个相同名字的方法,但这些方法参数的数量或类型必须不同(与方法的返回类型和参数名字无关)
- 构造方法
- 特点
- 名字必须与它所在类的名字完全相同
- 没有返回类型
- 可以重载
- 每个类至少需要一个构造方法
- 默认构造方法
- 当类中没有构造方法,JAVA会提供一个无参数的构造方法
- 如果该类已经定义了一个或多个构造方法,则JAVA不再提供默认构造方法。
- 类方法和实例方法
- 局部变量在使用前必须初始化或赋值
class A{
int a;
void show(){
int b;
int c = 12;
System.out.println(a); // 合法(成员变量声明后会赋初值)
System.out.println(b); // 非法
System.out.println(c); // 合法
}
}
对象
Class object; // 声明对象(形成一个空对象)
object = new Class(); // 创建对象(创建object实体)
object.method(); //通过.调用方法
object.a(); // 通过.引用对象实体
- 没有实体的对象称为空对象,空对象不能使用
- 如果一个实体不被某一对象所拥有则成为垃圾实体,Java有自动回收垃圾实体的功能,会定期检查回收垃圾实体。
- 参数传值
- Java中的参数传递都是传其本身保存的值的
- 传递基本类型的变量:传基本类型的变量中保存的值,修改不会改变原变量
- 传递引用类型的变量:传引用类型变量中保存的地址,修改会改变原变量
- 可变参数
public void method1(int ...x) // 合法
public void method2(double a, int ...x) // 合法
public void method3(int ...x, int y) // 非法
public int getSum(int ...x){
int sum = 0;
for(int i=0; i<x.length; i++>){
sum = sum+x[i];
}
return sum;
}
// for的省略用法
public int getSum(int ..x){
int sum = 0;
for(int param:x){
sum = sum + param;
}
return sum;
}
static关键字
- 类变量与类方法
- 用static修饰的成员变量称为类变量
- 用static修饰的方法称为类方法
- 实例变量和类变量
- 实例变量的内存在创建对象时才分配,每个对象的实例变量都被分配不同的内存空间
- 类变量的内存在加载类时就创建好了,同一类的对象的类变量共享同一内存空间
- 实例方法和类方法
this关键字
- this:当前对象
- this可以出现在实例方法和构造方法中,但不可以出现在类方法中
class tixing{
float a, b, h;
tixing(){
this(10, 20, 10); // 必须放在第一个语句
}
tixing(float x, int y, float z){
a = x;
b = y;
h = z;
}
}
包
- package关键字:声明包
- 声明包语句必须是Java源文件的第一条语句
- import语句:引入包中的类
- Java是动态加载类的
访问权限
- 其他类的对象是否可以通过.操作符操作自己的变量,或使用类中的方法
- 本类内访问不受限制
- 访问限制修饰符
- private
- public
- 无修饰符
- protected
- 可以制作公有方法set和get来与外界通过消息调用的方式间接通信
类的组合