类
类的基本概念
- 类和对象是面向对象程序设计中最核心的概念
- 类是对某一事物的描述(共性),是抽象的,概念上的定义,而对象则是实际存在的属性类,事物的具体的个体(个性),因为也称为实例。
- 面向对象程序设计思想的重点是类的设计,而不是对象的设计
- JAVA语言把数据成员称为域变量、属性、成员变量等;而把函数成员称为成员方法,简称为方法
定义类
1. 类的一般结构
[类修饰符] class 类名称
{[修饰符] 数据类型 成员变量名称;...[修饰符] 返回值的数据类型 方法名(参数1,参数2,...){语句序列;return [表达式];...}
}
- 类修饰符的含义
| 修饰符 | 含义 |
|---|---|
| public | 将一个类声明为公共类,可以被任何对象访问 |
| abstract | 将一个类声明为抽象类,没有实现方法,需要子类提供方法的实现,所以不能创建该类的实例 |
| final | 将一个类声明为最终类即非继承类,表示它不能被其他类所继承 |
| 缺省 | 缺省修饰符时,则表示只有在相同包中的对象才能使用这样的类 |
- 实例
public class Book{}
2. 成员变量
[修饰符] 变量类型 变量名 [= 初值];
- 成员变量修饰符的含义
| 修饰符 | 含义 |
|---|---|
| public | 公共访问控制符。指定该变量为公共的,可以被任何对象的方法访问 |
| private | 私有访问控制符。指定该变量只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此变量 |
| protected | 保护访问控制符。指定该变量只可以被它自己的类及其子类或同一包中的其他类访问,在子类中可以覆盖此变量 |
| 缺省 | 缺省访问控制符时,则表示在同一包中的其他类可以访问此成员变量,而其他包中的类不能访问该成员变量 |
| final | 最终修饰符。指定此变量的值不能该变。 |
| static | 静态修饰符。指定该变量被所有对象共享,即所有的实例可使用该变量 |
| transient | 过度修饰符。指定该变量是一个系统保留,暂无特别作用的临时性变量 |
| volatile | 易失修饰符。指定该变量可以同时被几个线程控制和修改 |
说明:在定义类的成员变量时,可以同时赋初值,表明成员变量的初始状态,但对成员变量的操作只能放在方法中。
public class Book{final int a = 1;public int b = 1;private int c = 1;
}
3. 成员方法
[修饰符] 返回值的数据类型 方法名(参数1,...)
{语句序列;return [表达式];
}
- 成员方法修饰符的含义
| 修饰符 | 含义 |
|---|---|
| public | 公共访问控制符。指定该方法为公共的,它可以被任何对象的方法访问 |
| private | 私有访问控制符。指定该方法只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此方法 |
| protected | 保护访问控制符。指定该方法只可以被它的类及其子类或同一包中的其他类访问 |
| 缺省 | 缺省访问控制符时,则表示在同一个包中的其他类可以访问此成员方法,而其他包中的类不能访问该成员方法 |
| final | 最终修饰符。指定该方法不能被重载 |
| static | 静态修饰符。指定不需要实例化一个对象就可以调用的方法 |
| abstract | 抽象修饰符。指定该方法只声明方法头,而没有方法体,抽象方法需在子类中被实现 |
| synchronized | 同步修饰符。在多线程程序中,该修饰符用于在运行前,对它所属的方法加锁,以防止其他线程访问,运行结束后解锁 |
| native | 本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的 |
public class Book{final int a = 1;public int b = 1;private int c = 1;public void add() {int i = 5;int j = 2;System.out.println( i + j );}}
4. 成员变量与局部变量的区别
1.从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数
2.从变量在内存中的存储方式上看,成员变量是对象的一部分,而对象是存在于堆内存的,而局部变量是存于栈内存的
对象的创建于使用
创建对象
- 创建对象实例
创建box对象box b;//声明指向对象的变量b
b = new box();//利用new创建新的对象,并让变量b指向它box b = new b();通过new运算符在堆内存中创建的实例化对象
- 成员变量的初始值
| 成员变量类型 | 初始值 |
|---|---|
| byte | 0 |
| short | 0 |
| int | 0 |
| long | 0L |
| float | 0.0F |
| double | 0.0D |
| char | '\u0000'(表示为空) |
| boolean | false |
| 所有引用类型 | null |
public class Main {public static void main(String[] args) {Book book = new Book();book.add();}
}
对象的使用
通过对象来引用对象成员的格式:对象名.对象成员对象名.成语名
在类定义内调用方法
例子
double volume()
{return this.area();
}在类的定义内调用本类的其他成员,可在该成员前加this,则this代表调用该成员的对象
- 实例
public class Book{final int a = 1;public int b = 1;private int c = 1;public void add() {System.out.println( this.a + this.b);}}
参数的传递
以变量为参数调用方法
调用方并传递参数时,参数其实就是方法的自变量个,所以参数要放在方法的括号内来进行传递
public class Book {private String name;String setName(String name) {this.name = name;return name;}
}
以数组作为参数或返回值的方法调用
- 传递数组
int[] a = {1,23,4};least(a);void least(int[] array)
{...
}
- 返回值为数组类型
int[][] a = { {1,2,3} };
int[][] b=new int[3][3];Transe pose = new Transe()b = pose.transponse(a);...int[][] transponse(int[][] array)
{...return array;
}...
匿名对象
例子
box b = new box();
b.setName(name);改写为:new box().setName(name);则new box()就是匿名对象。