知识点:
变量 类 对象
一、变量
1.1 概念
可以改变的数,称为变量。
在 Java 语言中,所有的变量在使用前必须声明。
一般通过“变量类型 变量名 = 变量值 ;”这三部分来描述一个变量。如:int a = 3 ;
变量的使用原则:就近原则,即尽量控制到最小范围。
1.2 局部变量
位置: 定义在方法里,或者局部代码块中。
注意:必须手动初始化,来分配内存。如:int i=5; 或者 int i; i=5;
作用域也就是方法里或者局部代码块里,方法运行完内存就释放了。
1.3 成员变量
位置: 定义在类里,方法外。
注意:不用初始化,也会自动被初始化成默认值。
作用域是整个类中,类消失了,变量才释放。
1.4 练习 1:局部变量与成员变量测试
创建 Java 工程: DAY04
创建包: cn.tedu.oop
创建类: Test1_Variable.java
package cn.mbh.oop;
/**
*@author MBH:
*@version 创建时间:2022年7月7日 下午12:38:38
*/
/**本类用于测试变量的使用*/
public class Test1_Variable {
//2.定义成员变量:
//1)位置在类内方法外
//2)可以不手动初始化,会有默认值
//3)作用在整个类中,类消失变量才会释放
static int count;
//3.变量的使用有一个原则:就近原则
static int sum = 200;
public static void main(String[] args) {
//1.定义局部变量:
//1)位置在方法/局部代码块里
//2)必须手动初始化(否则报错:The local variable sum may not have been initialized)
//3)作用在方法/局部代码块中,代码执行完该局部变量就被内存就释放了
int sum = 100;//局部变量在方法中
System.out.println(sum);//变量的就近原则,使用的都是自己附近的变量,100
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
//System.out.println(i);//报错:无法引用变量i:i cannot be resolved to a variable
System.out.println(count);
}
}
二、方法的递归
2.1 概念
在方法中调用自身
注意:程序要有出口,否则一直调用自身,内存会溢出。
需求:求数字 5 的阶乘,提示:5!=5*4*3*2*1
2.2 练习 2:求数字 5 的阶乘
创建包: cn.tedu.oop
创建类: Test2_Recursion.java
package cn.mbh.oop;
/**
*@author MBH:
*@version 创建时间:2022年7月7日 下午12:51:42
*/
/**本类用于求数字5的阶乘*/
//需求:求5的阶乘,已知1!=1
//5!=5*4*3*2*1=120
//f(n)代表求数字n的阶乘 f(n)=n*f(n-1) f(1)=1
//分解思路
//5!=5*4! --> 5*f(4)
//4!=4*3! --> 4*f(3)
//3!=3*2! --> 3*f(2)
//2!=2*1! --> 2*f(1)
//---------------------------------------------------------
//2!=2*1=2
//3!=3*2=6
//4!=4*6=24
//5!=5*24=120
public class Test2_Recursion {
public static void main(String[] args) {
//调用method()方法
int res = method(5);
System.out.println(res);//120
}
public static int method(int n) {
if (n == 1) {
return 1;
}else {
//递归:在方法内部继续调用方法本身
//方法的递归,就是不断的重复相同的业务,比如求阶乘
return n*method(n-1);
}
}
}
三、面向对象前言
3.1 概念
面向对象的编程实现(
OOP
,Object Oriented Programming)
面向对象其实是一种编程思想,通过它可以把生活中复杂的事情变得简单化,从原来的执行者变成了指挥者。
面向对象是基于面向过程而言的。比如.我们想吃一道菜,无需考虑是怎么传菜,怎么做菜的,只需点菜即可,传菜和做菜都有具体的对象来帮我们完成具体的功能.我们不需要关注实现的过程,只需要关注结果就好
3.2 面向对象的三大特征
1) 封装性,把相关的数据封装成一个“类”组件2) 继承性,是子类自动共享父类属性和方法,这是类之间的一种关系3) 多态性,增强软件的灵活性和重用性
四、类和对象
4.1 类
1) Java 语言最基本单位就是类,类似于类型。
2) 类是一类事物的抽象。
3) 可以理解为模板或者设计图纸。
4.2 对象
每个对象具有三个特点:对象的
状态
,对象的
行为
和对象的
标识。
1) 对象的状态用来描述对象的基本特征。
2) 对象的行为用来描述对象的功能。
3) 对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来。
4) 类是一类事物的抽象,对象是具体的实现。
4.3 类和对象的关系
1) 计算机语言是用来描述现实世界事物的。 特征/属性 + 功能/行为
2) 那怎么通过 java 语言描述呢?通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法。
4.4 练习 3-1:类的创建使用
创建包: cn.tedu.oop
创建类: Test3_ClassExec.java
需求:分析手机事物
属性:颜色,尺寸,品牌,价格功能:打电话,发短信,听音乐类:手机类,抽取相同的属性和行为对象:可以按照模板生产很多个手机,比如 1 号手机对象,包含特有的成员变量和成员方法通过 class 关键字创建类,通过 new 关键字创建对象。
package cn.mbh.oop;
/**
*@author MBH:
*@version 创建时间:2022年7月7日 下午1:09:04
*/
/**本类用于练习类与对象的创建和使用*/
public class Test3_ClassOOP {
//一个java文件中,可以存在多个类,但只能有一个类被public修饰
//并且要求这个被public修饰的类名就是当前文件的文件名
public static void main(String[] args) {
//2.通过new关键字创建手机对象,测试
Phone p = new Phone();
//3.通过.完成调用对象的功能
p.call();//正在打电话
p.message();//正在发短信
p.music();//正在听音乐
//4.通过.查看对象的属性值
System.out.println(p.color);//null
System.out.println(p.size);//null
System.out.println(p.model);//null
System.out.println(p.price);//0.0
}
}
//1.通过class创建手机类--用来描述手机这一类事物 -- 特征 + 行为
//类是一类事物的抽象,只抽象的规定一类事物的特点和行为
class Phone{
// 特征 -- 类的成员变量/属性 -- 位置是在类里方法外
String color;
String size;
String model;
double price;
// 行为 -- 类的成员方法
//修饰符 返回值 方法名(参数列表){方法体}
public void call() {
System.out.println("正在打电话");
}
public void message() {
System.out.println("正在发短信");
}
public void music() {
System.out.println("正在听音乐");
}
}
4.5 对象在内存中的存储
Java 把内存分成 5 大区域,我们重点关注栈和堆。
1、 一般来讲局部变量存在栈中,方法执行完毕内存就被释放
2、 对象(new 出来的东西)存在堆中,对象不再被使用时,内存才会被释放
3、 每个堆内存的元素都有地址值
4、 对象中的属性都是有默认值的
TIPS: 栈与队列都是一种结构。
栈:先进后出(FILO -- First In Last Out)
队列:先进先出(FIFO -- First In First Out)
4.6 练习 3-2:创建多个对象
package cn.mbh.oop;
/**
*@author MBH:
*@version 创建时间:2022年7月7日 下午1:09:04
*/
/**本类用于练习类与对象的创建和使用*/
public class Test3_ClassOOP {
//一个java文件中,可以存在多个类,但只能有一个类被public修饰
//并且要求这个被public修饰的类名就是当前文件的文件名
public static void main(String[] args) {
//2.通过new关键字创建手机对象,测试
Phone p = new Phone();
//3.通过.完成调用对象的功能
p.call();//正在打电话
p.message();//正在发短信
p.music();//正在听音乐
//4.通过.查看对象的属性值
System.out.println(p.color);//null
System.out.println(p.size);//null
System.out.println(p.model);//null
System.out.println(p.price);//0.0
//5.创建第二个对象
Phone2 p2 = new Phone2();
//调用模板里的功能
p2.call();
p2.message();
p2.music();
//给对象的属性设置值
p2.color="red";
p2.size="5.9";
p2.model="HUAWEI";
p2.price=8888;
System.out.println(p2.color);
System.out.println(p2.size);
System.out.println(p2.model);
System.out.println(p2.price);
}
}
//1.通过class创建手机类--用来描述手机这一类事物 -- 特征 + 行为
//类是一类事物的抽象,只抽象的规定一类事物的特点和行为
class Phone{
// 特征 -- 类的成员变量/属性 -- 位置是在类里方法外
String color;
String size;
String model;
double price;
// 行为 -- 类的成员方法
//修饰符 返回值 方法名(参数列表){方法体}
public void call() {
System.out.println("正在打电话");
}
public void message() {
System.out.println("正在发短信");
}
public void music() {
System.out.println("正在听音乐");
}
}
class Phone2 {
// 特征 -- 类的成员变量/属性 -- 位置是在类里方法外
String color;
String size;
String model;
double price;
// 行为 -- 类的成员方法
//修饰符 返回值 方法名(参数列表){方法体}
public void call() {
System.out.println("正在打电话");
}
public void message() {
System.out.println("正在发短信");
}
public void music() {
System.out.println("正在听音乐");
}
}