2022-7-18 第三小组 甘源册 学习笔记
知识点掌握情况
面向对象概念(了解) 方法的创建(理解) 方法的重载(理解) 不定长参数(理解)构造器(了解)
学习心情(心路历程)
今天讲的构造器,听着不是很懂,不太明白带着有参构造器的作用,不是很理解。希望老师能指导一下
1.Java面向对象
万事万物皆对象
1.1面向过程
面向过程就是分析得出,实现需求需要的步骤,通过一些方法,一步一步实现
-
例子
-
我去饭店吃蛋炒饭
-
面向过程完成就是,我到了饭店,和老板说要吃蛋炒饭,老板瞥了我一眼,道:“厨房在那边,自己去做。”说完老板抬了抬手,指了一个方向。我无奈地点点头,向厨房走去。进入厨房我发现厨房中空无一物,我的无奈更深了,看来所有的东西都需要我自己准备了。于是我 打算先准备好食材。没有鸡蛋怎么办?很简单,只要有一只鸡就可以了,它生下了蛋我就有鸡蛋了,于是我需要找到一只鸡。没有鸡怎么办呢?也很简单,有个鸡蛋就可以,只要孵出小鸡就有鸡生蛋了。但是没有鸡蛋,于是鸡生蛋,蛋生鸡的问题就开始了。。。
-
这是一种夸张的说,事实上面向过程的开发也是有基础建设存在的。
-
-
1.2面向对象(行为化)
把整个需求的特点或者是功能划分这些需求,将这些存在共性的部分,把他封装成类,(类实例化之后才是对象),让对象去解决问题。
-
例子
- 我去饭店吃蛋炒饭
- 到了饭店,告诉老板我要吃蛋炒饭,老板去做蛋炒饭,做完之后端上来,我支付宝付账之后,开吃。我需要掌握的技能是:吃饭、付账、说话和走路
- 对比面向过程,我不需要掌握过多的技能,不需要对我要完成的这件事的每一个步骤都了如指掌,不需要去做每一个步骤。例如做蛋炒饭的这件事就交给了厨师去完成,具体过程和方法我不需要关注,这样专业的人做专业的事,可以节省很大的开发时间。面向对象思想让每个开发者只需要关注自己开发的内容即可,降低了沟通成本、学习成本、开发成本等,大大提高效率
- 我去饭店吃蛋炒饭
-
高级的编程语言,会向着人的思维靠近
-
三大特征(四大特征):封装,继承,多态,(抽象)
-
封装
- 代码层面
- 思想层面
-
如果把变量直接声明在类里,加——成员变量(全局变量)
-
如果把变量声明在某个方法里:局部变量
1.3重点
- 我们能够遇见的所有的类都是引用数据类型
- 引用数据类型的初始值都是null
- 只要看见了new ,就不是null。他就有地址。
- 赋值时,除了String,其余的引用数据类型都需要new,不new就没有地址
- Java中的传参需要明确数据类型,(顺序要对上)
- java.lang(language)包下的所有的类不需要显示的导入
1.4class
class:用来创建一个类或创建一个数据类型
- 类名 对象名=new 构造器
1.5内存空间
1.5.1栈
栈内存储:变量,基本数据类型
1.5.2堆
创建对象的时候,堆内存保存的是它的地址。
1.6方法(重点)
-
方法的结构
- public 访问权限修饰符
- void 没有返回值(Boolean ,返回布尔型 int 返回整数型)
- 有返回值用return;
- run() 方法名:标识符
- {} 方法体--这个方法要干什么
- () 传参数
-
return
- return 关键字终止方法的继续执行
- 在方法里给他返回值
-
访问权限修饰符:
-
访问权限修饰符 类内部 同一个包下 子类 任何地方 可以修饰 private (私有的) Yes 属性,方法,构造器 default(默认的,友好的) Yes Yes 属性,方法,类,构造器 protected(受保护的) Yes Yes Yes 属性,方法,构造器 public(公有的) Yes Yes Yes Yes 类,属性,方法,构造器 -
public:最大的,只要是public声明的方法在同一个项目里都可以用
-
private:最小,只有在本类里可以用
-
protected: 可以跨包,如果跨包必须是它的子类
-
default: 当前包下可以访问,如果跨包需要导入它所在的包
-
-
如果一个方法有static要调用没有static的方法,就只能创建对象,适使用对象方法的形式调用
-
标识符的命名规则:字母,数字,下划线,美元符号,数字不能开头
- 类名:大驼峰
- 属性名,方法名:小驼峰
-
在声明方法时,括号里的参数是形式参数,形参,可以当局部变量使用
-
在调用方法时,括号里的参数(传入方法的参数)是实际参数,实参
-
方法自己调自己——递归。(有可能要出现栈溢出,内存溢出)
-
代码
-
// 斐波那契数列 public static int show(int num) { if (num==0 || num==1) { return 1; }else { return show(num-1)+show(num-2); } } //结果:show(5) 8 // 阶乘 public static int show(int num) { if (num>0) { return show(num-1)*num; }else { return 1; } } //结果: show(5) 120
-
1.6.1 方法的重载(Overload)
-
方法名相同
-
参数不同(参数的类型不同,参数的个数不同,参数的顺序不同)
-
与返回值的类型无关,与访问权限修饰符无关,与方法体无关
-
发生在同一个类里
-
练习代码
-
// 判断两个数大小 public static double max(double a,double b){ return a>b?a:b; } // 判断三个数大小 public static double max(double a, double b,double c){ return max(max(a,b),c); }
-
1.6.2不定长参数
- 参数列表中,只能定义一个不定长参数
- 不定长参数必须在列表的最后边
- 不定长参数可以传(0~+∞)个
// add(1,21,31,41,1,31.0);
public static double add(double... arr){
double d=0;
if (arr.length<2){
return arr[0];
}else {
for (int i = 0; i < arr.length; i++) {
d+=arr[0];
}
return d;
}
}
1.6.3构造器
- Java在new对象的时候,先看对象所对应的类有没有构造器,有什么样的构造器,如果没有构造器,则无法创建对象。
- 每个类会有一个默认的无参构造器
- 在对象实例化的过程,调用的构造器
- 我们创建对象实际上是通过构造器创建的
- 如果一个类中是显示的声明了一个的构造器,原来默认自带的无参构造器就失效
扩展
在Linux中,万事万物皆文件


浙公网安备 33010602011771号