一 面向对象的元素
1.类与对象
1.1 类: 一个具有相同特性的事物抽象描述
对象: 类的一个个实体,实例的,具体存在
类 是对象设计模板
1.2 类的声明
[ 修饰符 ] class 类名{
成员列表: 属性、 方法、构造器、内部类、代码块;
}
1.3 对象的实例
类名 对象名 = new 类名();
2.1 类的成员 —— 属性
2.1.1. 声明属性
[ 修饰符 ] class 类名{
[修饰符] 数据类型 属性名;
[修饰符] 数据类型 属性名 = 值; // 属性初始化值
}
例子
public static void main(String[] args){
Student s1 = new Student();
s1.name = '小灰灰';
s1.age = 10;
s1.sex = '男';
}
class Student{
String name;
int age;
String sex;
}
2.2.2 访问属性
(1) 本类访问属性
class Circle{
double radius;
double getArea(){
return 3.14 * radius * radius;//直接访问
}
}
(2) 其他类访问属性
class Circle{
double radius;
}
class TestCircle{
public static void main(String[] args){
Circle c1 = new Circle();
double area = 3.14 * c1.radius * c1.radius;//对象名.属性名
}
}
(3) 对象内存分析
public static void main(String[] args){
Student s1 = new Student();
s1.name = '小灰灰';
s1.age = 10;
s1.sex = '男';
}
class Student{
String name;
int age;
String sex;
}

数据类型: 可以是基本数据类型, 也可以是引用类型
2.2 类的成员 —— 方法
方法: 提高代码重用性
2.2.1 声明
[修饰符] class 类名{
[修饰符] 数据类型 属性名;
[修饰符] 返回值类型 方法名( [形参列表] ){
方法体
}
}
方法 = 方法签名 + 方法体
说明:
- 修饰符
- 返回值类型
(1) void: 表示无返回值
(2) 非void : 所有java数据类型
- 方法名
3.1. 见名知意
3.2 第二个首字母要大写
4.形参列表
在完成这个方法的功能时,需要一些数据,这些数据要由“调用者”来决定,那我们就可以设计形参。
语法格式:
():无参,空参
(数据类型 形参名):一个形参
(数据类型1 形参名1, ......, 数据类型n 形参名n):n个形参
5.方法体:实现方法的功能,最好一个方法就完成一个独立的功能。
2.2.2 方法的调用
//本类同级别方法调用:直接调用
【变量 = 】 方法名(【实参列表】);
//在其他类的方法中调用
【变量 = 】 对象名.方法名(【实参列表】);
(1)是否传实参
看被调用的方法是否有形参
(2)是否接收返回值
看被调用的方法是否是void,如果是void,就不需要也不能接收,如果不是void,就可以接收。
代码实例
//本类
class Circle{
double radius;
void printInfo(){
System.out.println("半径:" + radius);
}
void test(){
printInfo();//本类中调用无参无返回值方法
}
}
//其他类
class Circle{
double radius;
void printInfo(){
System.out.println("半径:" + radius);
}
}
class TestCircle{
public static void main(String[] args){
Circle c1 = new Circle();
c1.printInfo(); //其他类中调用无参无返回值方法
}
}
2.2.3方法声明与调用的原则
(1)方法必须先声明后调用
如果调用方法时,如果方法名写错或调用一个不存在的方法,编译会报错
(2)方法声明的位置必须在类中方法外
类{
方法1(){
}
方法2(){
}
}
(3)方法的调用的位置有要求
类{
方法1(){
调用方法
}
}
(4)方法的调用格式要与方法的声明格式对应
①是否要加“对象.”:看是否在本类中,还是其他类中
②是否要接收返回值:看被调用方法是否是void
③是否要传实参:看被调用方法是有形参列表
2.2.4 方法重载 Overload
概念:在同一个类中,出现了两个或多个的方法,它们的方法名称相同,形参列表不同,这样的形式称为方法的重载。和返回值类型无关。
例子代码:
public int max(int a,int b){
return a>b?a:b;
}
//求三个整数的最大值
public int max(int a, int b, int c){
return max(max(a,b),c);
}
//求两个小数的最大值
public double max(double a, double b){
return a>b?a:b;
}
2.4.5 方法参数传递 —— 值传递
(1)形参是基本数据类型时,实参给形参传递数据值,是copy的形式,形参对值的修改不影响实参。 .
(2)形参是引用数据类型时,实参给形参传递地址值,形参对对象的属性的修改,会影响实参对象的属性值,因为此时形参和实参就是指向同一个对象。
示例代码:
class Test{
public static void swap(int a, int b){
int temp = a;
a = b;
b = temp;
}
public static void main(String[] args){
int x = 1;
int y = 2;
swap(x,y);//调用完之后,x与y的值不变
}
}
示例代码:
class Test{
public static void change(MyData my){
my.num *= 2;
}
public static void main(String[] args){
MyData m = new MyData();
m.num = 1;
change(m);//调用完之后,m对象的num属性值就变为2
}
}
class MyData{
int num;
}
2.4.6 对象数组
1、元素是基本数据类型
2、元素是引用数据类型,也称为对象数组,即数组的元素是对象
示例代码:
class MyDate{
int year;
int month;
int day;
}
class Test{
public static void main(String[] args){
MyDate[] arr = new MyDate[3];//创建数组对象本身,指定数组的长度
for(int i=0; i<arr.length; i++){
arr[i] = new MyDate();//每一个元素要创建对象
arr[i].year = 1990 + i;
arr[i].month = 1 + i;
arr[i].day = 1 + i;
}
}
}
浙公网安备 33010602011771号