2022.07.18 第三小组 陈迪 学习笔记
Java面向对象:
1、Java是一种面向对象的编程语言,在Java中,万事万物皆对象。
(在linux中,万事万物皆文件)
面向过程和面向对象
面向过程:面向过程就是分析出实现需求需要的步骤,通过一些方法一步一步实现。(找到原材料,自己切割,自己缝制,每一个工序自己干。
面向对象(行为化):把整个需求按照特点、功能划分,将这些存在共性的部分封装成类(类实例化之后才是对象),让对象去解决问题。
高级的编程语言,会想着人的思考靠近。
面向对象更高级的抽象,是对现实世界的映射。
String,Scanner。我们在使用scanner的时候,从来没有考虑过scanner为什么能键盘输入,这就是别人给我们创建的对象,事实上我们自己也能创建对象,在开发中,基本上我们会大量的自己创建自己的对象。
在Java中,面向对象有3大特征:
1、封装,2、继承 ,3、多态,(4、抽象)
封装:1、代码层面
string xxx;(只声明不赋值)
2、思想层面
如果把变量直接声明在类里,成员变量(=js里面的全局变量)
如果把变量声明在某个方法里(局部变量)
创建对象的过程叫类的实例化过程
我们创建了一个Car类的对象car1
这个car1就是对象的名,car1就是标识符
对象名的命名规则:小驼峰
创建对象的语法:类名 对象名=new 类名();
car1和car2都是car类的一个对象,他们之间互相隔离
car是类,只有一份,car1,car2···是根据类构建出来的实例对象,可以有很多个,而且他们可能都不一样。
**类要运行一定要有主方法
划重点
1、之前学习过8种基本数据类型
2从今天开始,数据类型就更多了,能够遇见的所有的类,
包括刚刚创建的car是一种数据类型
所有的类都是数据类型,都是引用数据类型
class这个关键字,创建一个类,用来创建一个数据类型
像car1,car2···叫引用,是指向内存中的一块区域,存放这些引用的空间,叫堆,
1、内存空间:
栈:
变量 基本数据类型
堆:
存放对象实例
2、定义一个成员方法:
public:访问权限修饰符
void:没有返回值
run():方法名,标识符
2.1有返回值的方法:
public、boolean
返回值用return xxx,类型要匹配
对象,方法名
方法名不能重复
有返回值的方法在执行后会得到一个具体的值,可以存下来
{}:方法体,这个方法要干什么
():传参数
在声明方法时:括号里是形参,可以当局部变量使用
在调用方法时,括号里的参数是实参
参数可以有多个,中间用逗号隔开
(同一类中的成员方法无论在哪个位置)
2.2方法中可以调用另一种方法
如果一个方法有static,要调用一个非static的方法,只能创建对象,使用对象.方法的形式调用
2.3访问权限修饰符:
public:最大的,在同一个工程里都可以用
类,属性,方法,构造器
protected:可以跨包,如果跨包,必须是它的子类
属性,方法,构造器
默认的:当前包下可以访问
类,属性,方法,构造器
private:最小,只有在本类里可以用
属性,方法,构造器
类名:大驼峰
属性名,方法名:小驼峰
Java.lang包下的所有类不需要显式的导入
2.4方法重载:
1、方法名相同
2、参数不同(参数的类型不同,参数的个数不同,参数的顺序不同)
3、发生在同一个类型
与返回值的类型无关,与访问权限修饰符无关,与方法体无关。
好处:为了把功能相似甚至相同的方法用同一个变量表示
不定长参数int...arr
ublic class Day505 {
public static double max(double num1, double num2) {
return num1 > num2 ? num1 : num2;
}
public static double max(double num1, double num2, double num3) {
return max(max(num1, num2), num3);
}
public static void main(String[] args) {
System.out.println(max(13, 0.3, 6));
}
public class Dog {
String name;
String color;
int age;
}
public class Day507 {
public static void main(String[] args) {
Dog a = new Dog();
a.age=88;
a.name="ee";
a.color="red";
System.out.println(a.age+a.name+a.color);
}
}
public static int sum(int...arr) {
int result = 0;
if (arr.length < 2) {
result = arr[0];
} else {
for (int i : arr) {
result += i;
}
}
return result;
}
public static void main(String[] args) {
Day506 a=new Day506();
//int []arr=new int[]{2,3,4,5};
//System.out.println(a.sum(arr));
System.out.println(a.sum(9,1,2,3,3,4));
}
3、递归的问题:
stackOverflowError 栈溢出 内存溢出
1、递归【应用】
递归的介绍:
- 以编程的角度来看,递归指的是方法定义中调用方法本身的现象
- 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来解决
- 递归策略只需少量的程序就可以描述出解题过程所需要的重复计算
递归的注意事项:
- 递归一定要有出口,否则内存溢出
4、构造器(构造方法)
语法:
访问权限修饰符 类名(){}
特点:
1、Java在new对象的时候,先看对象所对应的类有没有构造器,有什么样的构造器
如果没有构造器,则无法创造对象
2、每个类会有一个默认的无参的构造器
3、在对象被实例化时,调用的构造器。
4、我们创建对象是通过构造器创建的
5、如果一个类中显式的声明了一个构造器,原来默认自带的无参构造器就失效
实例化过程:类名 对象名=new 构造器;
类与类之间的关系:has a关系
心得体会
今天初步学习了面向对象,对于方法调用以及递归掌握不好,理解的较慢,争取打好基础,课下多问同学,努力提高自己。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理