######学习心得❤#####
今天开始讲面向对象了,应该算是近期里最难的一个节点了,整个需求的按照特点功能划分,将这些存在共性的部分封装成类。让创建的对象去解决问题。这样的想法是很便捷的,理解上去就可以实现很多程序。
#####心情#####
今天感觉好累啊,一直在敲代码,说的比较细,想把说的细节都记住,理解的文字比较多。
1.Java是一门面向对象的编程语言。在Java中,万事万物皆是对象。(在linux中万事万物皆是文件)
2.面向过程和面向对象
面向过程:面向过程就是分析出实现需求需要的步骤,通过一些方法一步一步实现
面向对象(行为化),把整个需求的按照特点功能划分,将这些存在共性的部分封装成类(类实例化之后才是对象),让对象去解决问题。
简单解释
比如说我们要开始造车了,必须有一个图纸根据图纸可以造100台车这个图纸就是描述车的具体信息,对车信息的一个封装
封装:1.代码层面 2.思想层面
如果把变量直接声明在类里,成员变量(全局变量)
如果把变量声明在一个方法里,局部变量
成员变量->属性
根/据图纸去造车:🚗🚓🚕🛺🚙🚌🚐🚎
-
创 //建对象的过程,类的实例化的过程,对象又叫做类的一个实例
-
创建对象的语法:类名 对象名=new 类名
-
我 //们创建了Car类的对象car1
-
这 //个car1就是对象的名
-
这个car1就是一个标识符
-
对象名的命名规则:小驼峰
举个例子:
面向对象更高级的抽象,是对现实世界的一个映射,String Scanner 在使用Scanner的时候,我们从来没想过Scanner为什么可以键盘输入,这就是别人给我们创建的对象,所以在开发中我们也可以自己创建。
我们准备一个4s店,需要有一个车,有一家门店
先说说我们怎么用代码描述一辆车
车:描述信息,信息就是属性,属性从代码的角度来说就是变量,
定义好多变量,1.brand 2.color 3.length...
问题又来了,怎么描述很多辆车
我们可能要用几十个甚至上百个数组去描述车,这简直是一个灾难
这时,我们要用到面向对象思想,我们尝试将一个汽车多个属性进行打包
添加属性
public class Ch02 { public static void main(String[] args) { Car car1 = new Car(); //给车的属性赋值 car1.brand = "奥迪"; car1.color = "白色"; car1.length = 5L; //取出属性的值 System.out.println("生产了第一辆车,它的属性是:"+car1.brand+","+car1.color+","+car1.length+"米"); Car car2 = new Car(); car2.brand = "奔驰"; car2.color = "黑色"; car2.length = 4L; //取出属性的值 System.out.println("生产了第一辆车,它的属性是:"+car2.brand+","+car2.color+","+car2.length+"米")
✡我们需要了解两块内存空间吗✡
1.栈:变量,基本数据类型
2.堆
引用数据类型的初始
🃏主函数:
public class Ch03 { public static void main(String[] args) { // Car car; 声明了一个Car类型的属性car //赋值时除了string外,其余的引用数据类型都需要new Car car = new Car(); //只要看见了new,就不是null,它就有地址 System.out.println(car); } }
成员方法
1.方法名不能重复
自己调用自己 递归
递归的问题,StackOverflowError 栈溢出,内存溢出
思考:开发中到底用不用递归?如果用的话要注意什么?
练习:写两个重载的方法
1.一个方法求两个数的最大值
2.另一个方法求三个数的最大值
public class Ch03 { public int max(int a,int b ,int c){ int d = (a>b?a:b); return d>c?d:c; } public int max(int a,int b){ return a>b?a:b; } public static void main(String[] args) { Ch03 c = new Ch03(); c.max(23,342,3253); }
方法的重载 (overload)
1.方法名相同
2.参数不同(参数的类型,参数的个数,参数的顺序)
3.发生在同一个类里
与返回值类型无关,与访问的修饰符无关
构造器(构造方法)
语法:
访问权限修饰符 类名(){
}
特点:
1.java在new对象的时候,先看对象所对应的类有没有构造器,有什么样的构造器
如果没有构造器,就无法创建对象
2.每个类会有一个默认的无参构造器
3.在对象被实例化时,调用了构造器
4.我们创建对象实际上是创建了一个构造器
5.如果一个类中显示的声明了一个构造器,原来的默认的自带的无参构造器就失效,
先写一个猫🐱的信息:
public class Cat { String variety; int age; String color; public Cat(String v,int a,String c){ variety=v; age=a; color=c; } public String show(){ return "品种"+variety+"年龄"+age+"颜色"+color; } }
再写一个人🤦♂️的信息,调用猫的信息
public class Person { String name; int gender; int age; Cat cat; public Person(String n,int g,int a,Cat c){ name = n; gender = g; age = a; cat =c; } public void show(){ System.out.println("名字"+name +"性别"+(gender==1?"男":"女") +"年龄"+age +"猫的信息"+cat.show()); } public void look(){ } }
主函数再次调用,很方便,可以继续添加一些属性
public class Dome { public static void main(String[] args) { Cat cat = new Cat("布偶",2,"满耳满背"); Person person = new Person("jim",1,30,cat); person.show(); // person.look(cat); } }
能不能用一个方法,能够计算多个数相加
用这一个方法可以实现之前我们写过的方法重载的功能 这一个方法可以实现两个数,三个数,四个数,五个数...相加 都是同一个数据类
public class Ch04 { // public int sum(int arr[]) { // int result = 0; // if (arr.length < 2) { // result = arr[0]; // } else { // for (int i : arr) { // result += i; // } // } // return result; // } /* 不定长参数(简便写法) 1.参数列表中,至多有一个不定长参数 2.不定长参数必须在最后位置 */ public int sum(String d, double d1, 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) { Ch04 c = new Ch04(); // int [] arr = new int[]{2,3,3,4}; // System.out.println(c.sum(arr)); // c.sum(1, 3, 34, 5, 54, 45, 32, 3, 3, 32, 56, 78); c.sum("1" ,3);//我甚至可以不用管那个不定长
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现