20220718 第二小组 罗大禹 学习笔记
20220718 第二小组 罗大禹 学习笔记
Java面向对象
学习重点
1.成与变量与局部变量
2. 面向过程与面向对象
3. 成员方法
学习心得
老师今天上课讲的东西很抽象,较为难理解,但老师举了许多通俗易懂的例子来帮助我们理解,让我能够跟上老师的节奏,今天的知识一定要反复的去看,去好好的消化。
学习内容
Java面向对象
- Java是一门面向对象的编程语言,在Java中,万事万物皆对象
(在Linux中,万事万物皆文件)
面向过程和面向对象(理解)
面向过程:(理解)
面向过程就是分析出实现需求需要的步骤,通过一些方法一步一步地去实现
面向对象(行为化):(理解)
把整个需求的按照特点、功能划分,将这些存在共性的部分封装成类(类实例化之后才是对象)让对象去解决问题
举一个例子:
七夕:要送给女朋友一个包
面向对象:找个店,买个包。不管是商家,还是包,都是现实中真实存在的事物这个商店或者包,就可以称之为对象,在整个的我去买包还是商家卖包,我们忽略了这个包是咋加工的
面向过程:找到原材料,自己切割,自己缝制,每个工序都自己干,这就是面向过程
高级的编程语言,会向着人的思考靠近
面向对象更高级的抽象,是对现实世界的一个映射
我们在使用Scanner的时候,从来没有考虑过Scanner为什么能键盘输入
这就是别人给我们创建的对象,事实上我们也能自己创建对象,在开发中,基本上,我们会大量的自己创建对象自己用或给别人用
面向对象的特征(理解)
在Java中,面向对象有三(四)大特征:
1、封装
2、继承
3、多态
4、抽象
封装(理解)
举例说明:
我们现在准备开一个4s店,我们需要有车、需要门店,尝试去搞一个4s店
先说说怎么用代码去描述一辆车
车:描述信息:描述信息叫做属性,属性实际上从代码的角度考虑来说就是变量。
定义好多的变量:1、brand 2、color 3、length....
问题来了:怎么才能描述多个车?
我们可能需要几十个甚至上百个数组来维护一百辆车的信息。
这时,我们就要用面向对象的思想,我们将一个汽车的多个属性进行打包,这个过程实际上就是在封装对象
成员变量与局部变量(理解)
如果把变量直接声明在类型里:成员变量(全局变量)
如果把变量声明在某个方法里:局部变量
成员变量-->属性
创建对象的过程,又叫做类的实例化的过程,对象又叫做类的一个实例(理解)
我们创建了一个Car类的对象car1,
这个car1就是对象的名
其实这个car1就是个标识符
对象名的命名规则:小驼峰
创建对象的语法:类名 对象名 = new 类名();
重点:(理解)
- 之前我们学习过8种基本数据类型
- 从今天开始,我们的数据类型就更多了。我们能够遇见的所有的类,包括我们刚刚创建的Car是一种数据类型,(所有的类都是数据类型,都是引用数据类型。)
此刻起,我们才真正了解了class这个关键字,创建一个类,用来创建一个数据类型。car1,car2,car3....car100叫引用,它是指向内存中的一块区域。存放这些对象的空间,我们叫做堆。
我们需要了解两块内存空间:
-
栈: 我们存的是变量和基本数据类型(特点:先进后出)地址是一个十六进制的
-
堆:引用数据类型的初始值为null
赋值时除了String以外,其余的引用数据类型都需要new
成员方法(理解)
标识符的命名规则:
字母,数字,下划线,美元符号,数字不能开头
- 类名:大驼峰
- 属性名、方法名:小驼峰
语法
public void run(){
public:访问权限修饰符
void:没有返回值
run():方法名,标识符
{}:方法体。这个方法要干什么
():传参数 (形参) 参数可以有很多个,中间用逗号隔开
Java中的传参,需要明确数据类型
在声明方法时,括号里的参数,形式参数,形参,可以当做局部变量使用
在调用方法时,真正传入方法的参数,实际参数,实参。
访问权限修饰符:
1. public:公有的,公共的:最大,只要是public声明的方法,只要在同一个工程中,都能用
类,属性上,方法上,构造器
2. protected:受保护的:可以跨包,如果跨包,必须是他的子类
属性,方法,构造器
3. (默认的):友好的:当前包下可以访问
类,属性,方法,构造器
4. private:私有的(最小):只有当前类可以访问
属性,方法,构造器
有返回值的方法
public class Ch03(){
public double max(double nmb1 ,double nmb2){
return nmb1>nmb2 ? nmb1 : nmb2;
}
}
public static void main(String[] args) {
Ch03 c=new Ch03();//调用方法
double max1=c.max(1,2);
System.out.println(max1);
}
return关键字:
-
return关键字终止方法继续执行。
-
返回方法的返回值
问题:
在void的方法中,能不能有return?
能
返回值用return xxx;类型要匹配
有返回值的方法在执行后会得到一个具体的值,这个值可以存下来
double:返回值类型。我这个方法经过一系列的运行过后,要得到一个具体的值
这个值为返回值,返回值的类型是double
到底什么时候要有返回值,什么时候没有返回值?
开发中,大部分的方法都有返回值
成员方法
1.方法名不能重复
如果一个方法有static,要调用一个非static的方法,就只能创建对象,使用 对象.方法 的形式调用
2.自己调自己-递归
递归的问题:StackOverflowError 栈溢出 内存溢出
递归例子
斐波那契数列:
第一个数为0,第二个数为1,接下来的数为前两个数之和
例: 0 1 1 2 3 5 8 13.....
public int fibonacci(int number) {
if (number == 0 || number == 1) {
return number;
} else {
return fibonacci(number - 1) + fibonacci(number - 2);
}
}
方法的重载(Overload)
与什么有关
- 方法名相同
- 参数不同
(参数的类型,参数的个数,参数的顺序(可归为参数的类型之中))
与返回值类型无关,与访问权限修饰符无关,与方法体无关,方法的重载只与参数有关。
- 发生在同一个类里
方法的重载的好处:
为了把功能相似相同的方法用同一个名字
不定长参数
public int sum(String d,int ... arr){
int result = 0;
}
1.参数列表中,至多有一个不定长参数
2.不定长参数必须在最后位置
不定常参数的本质是数组
java.long包下的所有的类不需要显式的导入,剩下的都需要导包
构造器(构造方法)
语法:访问权限修饰符 类名(参数列表){ }
特点(特性):
-
Java在new对象的时候,先看对象所对应的类有没有构造器,有的话有什么样的构造器;如果没有构造器,则无法构建对象(创建对象)
-
每个类会有一个默认的无参的构造器
-
在对象被实例化时调用了构造器
-
我们创建对象实际上是通过构造器创建的
-
如果一个类中显示的声明了一个构造器,原来默认自带的无参构造器就失效(被覆盖)。如果有多个构造器,必须重载。
类与类之间的关系
has a的关系 有
is... a 继承
use...a 使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署