java、day10 面向对象 回顾方法 java值传递 类与对象的关系 构造器创建对象等
面向对象编程:oop (object-oriented programming) 面向对象:oo
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析。我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理问题(属性+方法=类)
1.0死记
以类的方式组织代码,以对象的形式组织封装数据,是抽象出来的
1.1什么是面向对象
1.1.1面向过程思想
-
-
面对过程适合处理一些简单的问题
1.1.2面向对象思想
-
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
-
面向对象适合处理复杂的问题,适合处理多人协作的问题
1.1.3三大特性以及从认识论角度和从代码运行角度
-
封装
-
继承
-
多态
-
从认识论的角度是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象
-
从代码运行角度考虑是先有类后有对象。类是对象的模板
2.回顾方法
2.1方法的定义
//Demo02 类 day9的笔记也是有的
public class Demo01 {
public static void main(String[] args) {
}
/* 方法: 修饰符 返回值类型 方法名 (形参){
* 方法体
* return 返回值;
* *}
*/
public String saysomething(){
return "hello,world";
}
}
2.2方法的调用
2.2.1方法调用的静态调用和动态调用
两个类,一个demo2 一个student类,学会用new来调用非静态方法。静态方法就可以直接Student.say();
public class Demo02 {
//静态方法 static
public static void main(String[] args) {
//想要调用非静态方法,就要先new给她分配一个内存空间
//也就是先实例化对象类型 对象名 = 对象值;
Student xiaoming = new Student();
Student xiaohong = new Student();
xiaohong.say();
xiaoming.say();
}
//非静态方法
}
//学生类
public class Student {
//非静态方法,没有加static
//在学生类里面写的方法,想在另外一个里面调用,就不能直接
public void say(){
System.out.println("学生说话了");
}
}
2.2.2 static静态是和类一起加载的
假如在同一类下
-
静态方法可以直接调用静态方法
-
动态方法可以直接调用动态方法
-
动态方法可以直接调用静态方法
-
只有静态方法不能调用动态方法
//Demo02 类
public class Demo03 {
public static void main(String[] args) {
}
//可以直接静态调用静态
public static void a(){ b(); }
public static void b(){ }
//动态可以直接调用动态
public void c(){ d(); }
public void d(){ }
//动态可以调用静态
public void e(){ f(); }
public static void f(){ }
//不可以报错
//public static void w(){ z(); }
//public void z(){ }
}
3.java值传递
//Demo02 类
public class Demo04 {
public static void main(String[] args) {
int a = 1;
System.out.println(a);
change(a);
System.out.println(a);
System.out.println(change(a));
}
public static int change(int a){
a=10;
int b=10;
return a;//这里的a换成b也可以
}
}
结果:
1
1
10
4.类和对象的关系
-
类是对某一类事物整体定义,但是并不能代表某一个具体事物
-
张三就是人的具体实例,张三家里的旺财就是狗的一个具体实例
4.1创建对象
-
不用再每一个类里面加main方法,一个项目应该只存在一个main方法
-
只有主项目才用main方法
-
更好的建模
-
使用new关键字创建对象,创建对象以后会分配空间并且初始化
-
4.2构造器
构造器也称作构造方法,是在进行创建对象的时候必须要调用的。并且构造器有两个特点
-
必须和类的名字相同
-
必须没有返回值类型,也不能写void
4.2.1一个类即使什么都不写,也会存在一个构造器 也就是方法
public class Person {
public Person() {
}
}//就算里面不写构造器,class文件生成的时候也会生成一个构造器4.2.2构造器的作用
4.2.3构造器注意点
-
构造器两个特点
-
必须和类的名字相同
-
必须没有返回值类型,也不能写void
-
-
作用
-
new本质在调用构造器
-
初始化对象的值
-
-
注意点
-
定义有参数构造器后,必须定义一个空的无参构造
-
-
alt+insert就会自动生成构造器
4.3new创建对象简单内存分析
-
首先加载main函数所在类,static数据是和类一起加载的
-
然后是进入主函数main()
-
之后因为主函数new了一个对象,所以加载了这个类
-
然后因为要给这个对象赋值,所以就在堆中开辟了空间,这时候都还是初始值
-
然后各个变量开始赋值
4.4类与对象总结***
-
类是一个模板(抽象总结出来),对象是一个具体实例
-
方法
-
定义、调用
-
-
对应的引用
-
引用类型:
-
基本类型(8)(在day5里面有)
-
对象是通过引用来操作的:栈--》堆
-
-
属性:字段field 成员变量
-
默认初始化
-
数值:0 0.0
-
char : u0000
-
boolean:false
-
引用:null
赋值 :修饰符 属性类型 属性名 = 属性值
-
-
对象的创建于使用
-
必须使用new关键字创造对象,构造器 Person raoxin = new Person();
-
对象的属性 raoxin.name
-
对象的方法 raoixn.sleep()
-
-
类里面只能写:
-
静态的属性 属性
-
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现