面向对象
- 概念
- 面向过程:清楚每一步的步骤
- 面向对象:找到一个对象,对象中有详细的步骤
- 如何描述生活中的事物
Java中的名称 | 描述 | 事物中的名称 |
---|
成员变量 | 事物的属性 | 该事物的描述信息(事物身上的名词) |
成员方法 | 事物的行为 | 该事物能够做什么(事物身上的动词) |
- 类与对象
- 类:是一组相关的属性和行为的集合
- 对象:是该类事物的具体体现
- 示例:
- 成员变量和局部变量的区别
区别 | 成员变量 | 局部变量 |
---|
类 | 在类中方法外 | 在方法定义中或者方法声明上 |
内存 | 在堆内存(成员变量属于对象,对象进堆内存) | 在栈内存(局部变量属于方法,方法进栈内存) |
生命周期 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的调用完毕而消失 |
初始化值 | 有默认初始化值 | 没有默认初始化值,必须定义,赋值,然后才能使用 |
- 注意事项:
- 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
- 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
- 引用数据类型变量包括哪些:数组,类,接口,枚举
- 匿名对象
- 没有名字的对象
- 调用方法,仅仅只调用一次的时候。
- 那么,这种匿名调用的好处是节省代码
- 注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。
- 匿名对象可以作为实际参数传递
示例
class Demo2_Phone {
public static void main(String[] args) {
Phone p = new Phone();
p.brand = "锤子";
p.price = 998;
System.out.println(p.brand + "..." + p.price);
p.call();
p.sendMessage();
p.playGame();
}
}
class Phone {
String brand;
int price;
public void call() {
System.out.println("打电话");
}
public void sendMessage() {
System.out.println("发信息");
}
public void playGame() {
System.out.println("玩游戏");
}
}
- 构造方法
- 构造方法概述和作用
- 构造方法格式特点
- a:方法名与类名相同(大小也要与类名一致)
- b:没有返回值类型,连void都没有
- c:没有具体的返回值return;
- 构造方法的重载
- 方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
- 构造方法注意事项
- a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
- b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
- 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
- static关键字的特点
- a:随着类的加载而加载
- b:优先于对象存在
- c:被类的所有对象共享
- 举例:咱们班级的学生应该共用同一个班级编号。
- 其实这个特点也是在告诉我们什么时候使用静态?
- 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
- 举例:
- 饮水机(用静态修饰)
- 水杯(不能用静态修饰)
- 共性用静态,特性用非静态
- d:可以通过类名调用
- 其实它本身也可以通过对象名调用。
- 推荐使用类名调用。
- 静态修饰的内容一般我们称其为:与类相关的,类成员
- static的注意事项
- a:在静态方法中是没有this关键字的
- 如何理解呢?
- 静态是随着类的加载而加载,this是随着对象的创建而存在。
- 静态比对象先存在。
- b:静态方法只能访问静态的成员变量和静态的成员方法
- 静态方法:
- 成员变量:只能访问静态变量
- 成员方法:只能访问静态成员方法
- 非静态方法:
- 成员变量:可以是静态的,也可以是非静态的
- 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
- 简单记:
- 静态变量和成员变量的区别
区别 | 静态变量 | 成员变量 |
---|
类别 | 类(类变量) | 对象(对象变量) |
内存中的位置 | 存储于方法区的静态区 | 存储于堆内存 |
在内存中出现的时间 | 随着类的加载而加载,随着类的消失而消失 | 随着对象的创建而存在,随着对象的消失而消失 |
调用 | 通过类名调用,也可以通过对象调用 | 只能通过对 象名调用 |
示例
import java.util.Scanner;
class Test1_GuessNum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数,范围在1-100之间");
int guessNum = (int)(Math.random() * 100) + 1;
while (true) {
int result = sc.nextInt();
if (result > guessNum) {
System.out.println("大了");
} else if (result < guessNum) {
System.out.println("小了");
} else {
System.out.println("中了");
break;
}
}
}
}