目录
类和对象
定义
类:抽象的、概念上的定义
对象:实际上存在的,也称为实例(instance)
面向对象程序设计的重点:类的设计
设计类就是设计类的成员
类的成员:属性和方法
属性 = 成员变量 = field = 域 = 字段
创建类的对象 = 实例化类 = 类的实例化
方法 = 成员方法 = 函数 = method
类和对象的使用
- 创建类
- 类的实例化
- 调用对象的结构(对象.属性、对象.方法)
如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非static)
意味着:如果修改一个对象的属性,不影响另一个对象的属性值
//测试类
public class PresonTest{
public static void main(String[] args){
//创建Person类的对象
Person p1 = new Person();
//Scanner scanner = new Scanner(System.in);
//调用结构
//调用属性:对象.属性
p1.name = "Tom";
p1.isMale = true;
System.out.println(p1.name); //Tom
//调用方法:对象.方法
p1.eat(); //吃饭
p1.sleep(); //睡觉
p1.talk("中文"); //说话,使用的是:中文
//++++++++++++++++++++++++++++++++++++++++
Person p2 = new Person();
System.out.println(p2.name); //null
System.out.println(p2.isMale); //False
//++++++++++++++++++++++++++++++++++++++++
//将p1变量保存的地址赋值给p3,p1、p3指向了堆空间中的同一个对象实体
Person p3 = p1
System.out.println(p3.name); //Tom
p3.age = 10;
System.out.println(p1.age); //10
}
}
class Person{
//属性
String name;
int age = 1;
boolean isMale;
//方法
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
public void talk(Sting language){
System.out.println("说话,使用的是:" + language);
}
}
内存解析
堆:存放对象实例
栈:存储局部变量(方法中的变量都是局部变量)
方法区:类信息、常量、静态变量、即时编译器编译后的代码
类中属性的使用
属性 VS 局部变量
1. 相同点:
1.1 定义变量的格式:数据类型 变量名 = 变量值
1.2 先声明后使用
1.3 变量都有其对应的作用域
2. 不同点:
2.1 在类中声明的位置不同
**属性**:直接定义在{}内
**局部变量**:声明在方法内、方法形参、构造器形参、构造器内部的变量
2.2 权限修饰符不同
**属性**:可以在声明时,指明其权限、使用权限修饰符。
private、public、缺省、protected --> 封装性
2.3 默认初始化值的情况
**属性**:类的属性,根据其类型,都有默认初始化值。
整型(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0
布尔型(boolean):false
引用数据类型:null
**局部变量**:没有默认初始化值
在引用前必须显式赋值
特别地:形参在调用时,赋值即可。
2.4 在内容中加载的位置
**属性**:加载到堆中(非static)
**局部变量**:加载到栈中
public class UserTest{
}
class User{
//属性(成员变量)
String name;
int age;
boolean isMale;
public void talk(String language){ //language:形参
System.out.println("使用" + language + "交流");
}
public void eat(){
String food = "饺子"; //局部变量
System.out.println("中国人喜欢吃:" + food);
}
}
类中方法的使用
方法:描述应该具有的功能
例:
Math类:sqrt()、random()
Scanner类:nextXxx()
Arrays类:sort()、binarySearch()、toString()、equals()
举例
public void eat(){}
public void sleep(int hour){}
public String getName(){}
public String getNation(String nation){}
public class CustomerTest{
public static void main(String[] args){
Customer c1 = new
}
}
//客户类
class Customer{
//属性(成员变量)
String name;
int age;
boolean isMale;
public void eat(){
System.out.println("客户吃饭");
}
public void sleep(int hour){
System.out.println("休息了" + hour + "个小时");
}
public String getName(){
return name;
}
public String getNation(String nation){
String info = "我的国籍是:" + nation;
return info;
}
}
方法声明
权限修饰符 返回值类型 方法名(形参列表){
方法体
}
权限修饰符
private、public、缺省、protected --> 封装性再详细叙述
返回值类型
- 有返回值
如果有,在方法声明时,指定返回值类型。同时,方法中需使用return返回该类型的变量或常量
- 无返回值
如果没有,在方法声明时,使用void表示。通常,没有返回值的方法中,就不需要使用return;若需要使用时,只能“return;”表示结束此方法。
方法名
遵循标识符规则和规范,见名知义
形参列表
数据类型1 形参1, 数据类型2 形参2, 数据类型3, 形参3
方法体
方法功能的实现
public class CustomerTest{
public static void main(String[] args){
Customer c1 = new Customer();
c1.eat(); //报错
}
}
//客户类
class Customer{
//属性(成员变量)
String name;
int age;
boolean isMale;
private void eat(){
System.out.println("客户吃饭");
}
public void sleep(int hour){
System.out.println("休息了" + hour + "个小时");
}
public String getName(){
if(age > 18){
return name;
}else{
return "Tom";
}
}
public String getNation(String nation){
String info = "我的国籍是:" + nation;
return info;
}
}
方法的使用
- 方法内可以调用当前类中的属性或方法
特殊地:方法A中有吊用了方法A(递归) - 方法中不能定义方法
public class CustomerTest{
public static void main(String[] args){
Customer c1 = new Customer();
c1.eat(); //客户吃饭
c1.sleep(8); /*休息了8个小时
客户吃饭*/
}
}
//客户类
class Customer{
//属性(成员变量)
String name;
int age;
boolean isMale;
public void eat(){
System.out.println("客户吃饭");
}
public void sleep(int hour){
System.out.println("休息了" + hour + "个小时");
eat(); //调用了类中的方法
// sleep(10) //递归,报错,一直调用,栈溢出
}
public String getName(){
if(age > 18){ //此时调用了类中的属性
return name;
}else{
return "Tom";
}
}
public String getNation(String nation){
String info = "我的国籍是:" + nation;
return info;
}
}
return
使用在方法体中
作用
- 结束方法
- 有返回值的方法,返回数据
- 注意点:return 后面不可以声明语句
面向对象的三条主线
- 类及类的成员:属性、方法、构造器;代码块、内部类
- 面向对象的三大特征:封装、集成、多态
- 其他关键字
面向对象和面向过程的编程思想
面向过程:强调功能行为,以函数为最小单位
面向对象:强调具备了功能的对象,以类/对象为最小单位
类和对象的理解
类是一个抽象的概念;对象是实际存在的个体
对象是类派生出来的