一、类和对象二、类中方法的声明与使用 一、类和对象
类(Class)和对象(Object) 是面向对象的核心概念。
类是对一类事物的描述,是抽象的、概念上的定义。对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
如图类比理解:
面向对象程序设计的重点是类的设计。而类的设计,其实就是类的成员的设计。
1.类的成员: 属性(成员变量/field)和方法(行为/成员方法/函数)。
如:
类的语法格式:
修饰符 class 类名 { 属性声明; 方法声明; }
说明: 修饰符public:类可以被任意访问
2.如何使用类?
类的实例化: 创建类的对象。
创建对象语法: 类名 对象名 = new 类名();使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
public class Animal {public int legs;public void eat(){System.out.println(“Eating.”);}public viod move(){System.out.println(“Move.”);}}public class Zoo{public static void main(String args[]){//创建对象Animal dx=new Animal();dx.legs=4;//访问属性,给其赋值System.out.println(dx.legs);dx.eat();//调用方法dx.move();//调用方法 } }
3.一个类多个对象情况
每个对象都独立的拥有一套类的属性。
4.内存解析(类比数组)
堆(Heap):存放对象实例(属性)。
栈(Stack):是指虚拟机栈。虚拟机栈用于存储局部变量等。
方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
5.属性(成员变量)和局部变量
5.1 属性(成员变量)
格式: 修饰符 数据类型 属性名 = 初始化值 ;
常用的权限修饰符有:private、protected、public其他修饰符:static、final (暂不考虑)
5.2 相同与不同点
相同:
定义变量格式: 数据类型 变量名 = 变量值;先声明,后使用变量都有其对应的作用域
不同:
1.格式
修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ….){
方法体代码
return 返回值;
}
其中:
修饰符: public、缺省、private、protected等。返回值类型:
没有返回值:void。
有返回值,声明出返回值的类型。与方法体中“return 返回值”搭配使用方法名: 属于标识符,命名时遵循标识符命名规则和规范,“见名知意”形参列表: 可以包含零个、一个或多个参数。多个参数时,中间用 “,” 隔开返回值: 方法在执行完毕后返还给调用它的程序的数据
例如:
public class Person{private int age;public int getAge() { //声明方法(函数)getAge()return age; }public void setAge(int i) //声明方法setAge(int i) { age = i; //将参数i的值赋给类的成员变量age } }
2.例题:利用面向对象的编程方法,设计类Circle计算圆的面积。
package com.qihang;//测试类public class CircleTest {public static void main(String[] args) {Circle c1 = new Circle();c1.radius = 2;//对应方法1//double area = c1.findArea();//System.out.println(area);//对应方法2 c1.findArea();}}class Circle{//属性double radius;//求圆面积方法//方法1//public double findArea() {//double area = Math.PI*radius*radius;//或直接写3.14//return area;//}//方法2public void findArea() {double area = Math.PI*radius*radius;//或直接写3.14System.out.println("面积为:"+area); }}
3.方法(函数)的重载(overload)
4.方法参数的值传递机制
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
Java的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。
即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
5.递归函数
递归方法:一个方法体内调用它自身。
方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执 行无须循环控制。递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
如:计算1-100之间所有自然数的和
public int sum(int num){if(num == 1){return 1;}else{return num + sum(num - 1); } }