javase学习笔记-基础2-基于尚硅⾕宋红康教程
⾯向对象
何为对象
1. 在Java语⾔范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调⽤具体的功能结构
1. Scanner,String等
2. ⽂件:File
3. ⽹络资源:URL
2. 涉及到Java语⾔与前端html、后端的数据库交互时,前后端的结构在Java层⾯交互时,都体现为类、对象。
⾯向对象学习的三条主线
1. Java类及类的成员:属性、⽅法、构造器:代码块、内部类
2. ⾯向对象的⼤特征:封装性、继承性、多态性、(抽象性)
3. 其它关键字:this、super、static、final、abstract、interface、package、import等
类的属性
1. 类的属性和变量的区别
1. 权限修饰符的不同属性:可以在声明属性时,指明其权限,使⽤权限修饰符。常⽤的权限修饰符:private、public、缺省
(default)、protected —>封装性
2. 默认初始化值的情况:类的属性,根据其类型,都有默认初始化值。
1. 整型(byte、short、int、long:0)
2. 浮点型(`float`、`double`:0.0)
3. 字符型(char:0 (或'\u0000'))
4. 布尔型(boolean:false)
5. 引⽤数据类型(类、数组、接⼝:nul l)
注意:局部变量没默认初始化值,意味着,我们在调⽤局部变量之前,⼀定要显式赋值。特别地:形参在调⽤时,我们赋值即可。类的⽅法
类的⽅法:描述类应该具的功能。
1. ⽅法的声明:权限修饰符 返回值类型 ⽅法名(形参列表){
⽅法体
}
2. return关键字
1. 使⽤范围:使⽤在⽅法体中
2. 作⽤:
1. 结束⽅法
2. 针对于返回值类型的⽅法,使⽤return 数据⽅法返回所要的数据。
3. 注意点:return关键字后⾯不可以声明执⾏语句
3. ⽅法的重载
3. ⽅法的重载
1. 定义:在同⼀个类中,允许存在⼀个以上的同名⽅法,只要它们的参数个数或者参数类型不同即可。
2. 总结:“两同⼀不同”:同⼀个类、相同⽅法名参数列表不同:参数个数不同,参数类型不同.
3. 代码举例
举例⼆:
//如下的4个⽅法构成了重载
public void getSum(int i,int j){
System.out.println("1");
}
public void getSum(double d1,double d2){
System.out.println("2");
}
public void getSum(String s ,int i){
System.out.println("3");
}
public void getSum(int i,String s){
System.out.println("4");
}
不构成重载的举例:
//如下的3个⽅法不能与上述4个⽅法构成重载
// public int getSum(int i,int j){
/
/ return 0;
// }
// public void getSum(int m,int n){
//
// }
// private void getSum(int i,int j){
//
// }
注意:⽅法的重载跟⽅法的权限修饰符、返回值类型、形参变量名、⽅法体都没关系
4. 可变个数的参数⽅法设置⽅法
1. 可变个数形参的格式:数据类型 … 变量名
2. 当调⽤可变个数形参的⽅法时,传⼊的参数个数可以是:0个,1个,2个,多个.
3. 可变个数形参的⽅法与本类中⽅法名相同,形参不同的⽅法之间构成重载
4. 可变个数形参的⽅法与本类中⽅法名相同,形参类型也相同的数组之间不构成重载。换句话说,⼆者不能共存。
5. 可变个数形参在⽅法的形参中,必须声明在末尾
6. 可变个数形参在⽅法的形参中,最多只能声明⼀个可变形参。
7. 代码举例
public void show(int i){
}
public void show(String s){
System.out.println("show(String)");
}
public void show(String ... strs){
public void show(String ... strs){
System.out.println("show(String ... strs)");
for(int i =0;i < strs.length;i++){
System.out.println(strs[i]);
}
}
//不能与上⼀个⽅法同时存在
public void show(String[] strs){
}
//调⽤时:
test.show("hello");
test.show("hello","world");
test.show();
test.show(new String[]{"AA","BB","CC"});
4. ⽅法的重写
1. ⼦类继承⽗类以后,可以对⽗类中同名同参数的⽅法,进⾏覆盖操作
2. 重写以后,当创建⼦类对象以后,通过⼦类对象调⽤⼦⽗类中的同名同参数的⽅法时,实际执⾏的是⼦类重写⽗类的⽅法。
3. 重写的规则:
1. ⽅法的声明: 权限修饰符 返回值类型 ⽅法名(形参列表) throws 异常的类型{
//⽅法体
}
2. ⼦类重写的⽅法的⽅法名和形参列表与⽗类被重写的⽅法的⽅法名和形参列表相同
3. ⼦类重写的⽅法的权限修饰符不⼩于⽗类被重写的⽅法的权限修饰符
4. ⼦类不能重写⽗类中声明为private权限的⽅法
5. 返回值类型:
1. ⽗类被重写的⽅法的返回值类型是void,则⼦类重写的⽅法的返回值类型只能是void
2. ⽗类被重写的⽅法的返回值类型是A类型,则⼦类重写的⽅法的返回值类型可以是A类或A类的⼦类
3. ⽗类被重写的⽅法的返回值类型是基本数据类型(⽐如:double),则⼦类重写的⽅法的返回值类型必须是相同的基本
数据类型(必须也是double)
4. ⼦类重写的⽅法抛出的异常类型不⼤于⽗类被重写的⽅法抛出的异常类型
4. 代码举例
class Circle{
public double findArea(){}//求⾯积
}
class Cylinder extends Circle{
public double findArea(){}//求表⾯积
}
// ***************
class Account{
public boolean withdraw(double amt){}
}
class CheckAccount extends Account{
public boolean withdraw(double amt){}
}
5. 重载和重写的区别
重载,是指允许存在多个同名⽅法,⽽这些⽅法的参数不同。
编译器根据⽅法不同的参数表,对同名⽅法的名称做修饰。
对于编译器⽽⾔,这些同名⽅法就成了不同的⽅法。
它们的调⽤地址在编译期就绑定了。
Java的重载是可以包括⽗类和⼦类的,即⼦类可以重载⽗类的同名不同参数的⽅法。
所以:对于重载⽽⾔,在⽅法调⽤之前,编译器就已经确定了所要调⽤的⽅法,这称为**“早绑定”或“静态绑定”;**⽽对于多态,只等到⽅法调⽤的那⼀刻,解释运⾏器才会确定所要调⽤的具体⽅法,这称为“晚绑定”或“动态绑定”。
6. java的值传递机制
1. 规则:
1. 如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
2. 如果变量是引⽤数据类型,此时赋值的是变量所保存的数据的地址值。
2. 形参:⽅法定义时,声明的⼩括号内的参数
3. 实参:⽅法定义时,声明的⼩括号内的参数
7. 递归⽅法:⼀个⽅法体内调⽤它⾃⾝
1. ⽅法递归包含了⼀种隐式的循环,它会重复执⾏某段代码,但这种重复执⾏⽆须循环控制。
2. 递归⼀定要向已知⽅向递归,否则这种递归就变成了⽆穷递归,类似于死循环。
3. 代码举例
// 例1:计算1-n之间所⾃然数的和
public int getSum(int n){// 3
java基础教程第三版pdfif(n ==1){
return1;
}else{
return n +getSum(n -1);
}
}
// 例2:计算1-n之间所⾃然数的乘积:n!
public int getSum1(int n){
if(n ==1){
return1;
}else{
return n *getSum1(n -1);
}
}
//例3:已知⼀个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),
//其中n是⼤于0的整数,求f(10)的值。
public int f(int n){
if(n ==0){
return1;
}else if(n ==1){
return4;
}else{
// return f(n + 2) - 2 * f(n + 1);
/
/ return f(n + 2) - 2 * f(n + 1);
return2*f(n -1)+f(n -2);
}
}
类的封装性
1. 类的封装性—权限具体修饰范围
4种权限都可以⽤来修饰类的内部结构:属性、⽅法、构造器、内部类
修饰类的话,只能使⽤:缺省、public
2. 封装性的体现:
1. 将类的属性xxx私化(private),同时,提供公共的(public)⽅法来获取(getXxx)和设置(setXxx)此属性的值
2. 不对外暴露的私有的⽅法
3. 单例模式(将构造器私有化)
4. 如果不希望类在包外被调⽤,可以将类设置为缺省的。
类的继承性
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论