第四章、Java面向对象(二)
本人也是刚入门Java语言,可能会有一些地方出现错误,描述的不对。如果发现不对的地方请及时指出,好对其进行修改。这样不仅可以让我学到东西,也可以让其他刚入门的朋友学习更正确的内容。
所有内容仅供参考。不具有完全的准确性!
注:关于Java的所有内容都会参考到尚硅谷在网上公开的学习视频及其提供的PPT
一、匿名对象
语法格式:
new 类名().方法() 或 new 类名().属性
例:
new Person().eat();
new Person().name = “法外狂徒张三”;
可以不定义对象的句柄,而直接调用这个对象的方法
使用情况:
- 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象
- 常将匿名对象作为实参传递给一个方法调用
一个匿名对象只能使用一次 —— 没有对象名
二、类的成员之一:属性
语法格式:
说明:
- 修饰符:
常用的修饰符有:private、缺省(省略)、protected、public
其他修饰符:static、final - 数据类型:
任何基础数据类型和任何引用数据类型 - 属性名:
属于标识符,应符合标识符的命名规则和规范
三、变量的分类
变量分为两类:成员变量和局部变量
成员变量:即属性,声明在类之内,方法体之外
局部变量:声明在方法体内
两者的区别:
相同:都有声明周期,但周期长度不同
不同:局部变量除形参之外,都需要显示初始化
四、类的成员之二:方法
(一)方法的概述
- 用来实现某个特定功能的操作。
- 可能有多个位置需要一些相同的功能,把这个功能单独写在一个方法中,可以减少代码量。实现代码的重用
- Java中方法不能独立存在,必须声明在类中
(二)方法的格式
语法格式:
说明:
- 修饰符:
常用的修饰符有:private、缺省(省略)、protected、public
其他修饰符:static、final - 返回值类型:
不需要返回值:void
需要返回值:声明需要的返回值类型。与方法体中“return 返回值”类型一致。 - 方法名:
属于标识符,命名时遵循标识符命名规则和规范 - 形参列表:
可以包含零个或一个以上的参数。多个参数时,中间用逗号隔开 - 返回值:
方法在执行到最后最后一行代码时,返回一个和返回值类型相同的数据类型。如果返回值类型是void,则不需要返回任何数据。
例:
public void test1(){
System.out.println("我是一个无参无返回值的方法");
}
public void test2(String name){
name = "李四";
System.out.println("我是一个有参无返回值的方法,我的名字是:" + name);
}
public void test3(String name,int age){
System.out.println("我是一个多参无返回值的方法");
System.out.println("我叫:" + name + ",今年:" + age + "岁");
}
public int test4(){
System.out.println("我是一个无参有返回值的方法");
return 5;
}
public String test4(String name){
name = "小王吧";
System.out.println("我是一个有参有返回值的方法");
return name;
}
注意:
- 方法被调用一次,就会执行一次
- 没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句。如果使用,仅用来结束方法。
- 定义方法时,方法的结果应该返回给调用者,交由调用者处理。
- 方法中只能调用方法或属性,不可以在方法内部定义方法。
五、方法的更多内容
(一)方法的重载
-
为什么要有重载
由于在写程序的过程中会经常遇到一些功能类似,到传递的参数存在差异,此时如果每个方法都使用不同的名字(起名字也是一件非常痛苦的事,而且多个功能相似的情况下还要起不同的名字就更痛苦了),程序员就需要记忆大量的名字而导致代码效率极大的降低。
通过重载程序员只需要记住一个方法名就可以根据不同的参数个数,顺序,类型,自动匹配到对应的方法,避免了写过多方法名而导致最后使用的时候分不清应该使用哪一个的痛苦。 -
重载可以做什么
- 不用为了对不同的参数类型或参数个数,而写多个方法名
- 可以体现出多态性。
- 通过不同的参数列表可以定义不同的功能
-
重载怎么用
- 方法名相同
- 方法的参数类型,参数个不同
- 方法的返回类型可以不相同
- 方法的修饰符可以不相同
- 方法能够在同一个类中或者在子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
- main 方法也可以被重载
例:
public int add(int i,int j){//计算int型的和
return i + j;
}
public double add(double i,double j){//计算double型的和
return i + j;
}
特点:与返回值类型无关,只看参数列表,且参数列表必须不同。(Java系统会根据传入的参数匹配到对应的参数方法)
注意:若两个参数类型不同,则顺序不同,匹配到的方法就不同。
例:
public void message(String name,int age){
System.out.println("姓名:" + name + ",年龄:" + age);
}
public void message(int age,String name){
System.out.println("姓名:" + name + ",年龄:" + age);
}
注意和重写(覆盖)区分开!!!
(二)可变个数的形参
在Java SE 1.5版本以后,允许直接定义能和多个实参相匹配的形参。
在1.5版本之前也可以定义可变个数的形参,需要使用数组的形式:
public void add(int[ ] i){}
在 1.5版本以后,可以使用专门针对可变形参个数的形式:
public void add(int…i ){}
通过“…”的形式就表示该形参个数是可变的,可以传入零个及以上的对应类型参数
说明:
- 声明格式:方法名(参数的类型名 …参数名)
- 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
- 可变个数形参的方法与同名的方法之间,彼此构成重载
- 可变参数方法的使用与方法参数部分使用数组是一致的
- 方法的参数部分有可变形参,需要放在形参声明的最后
- 在一个方法的形参位置,最多只能声明一个可变个数形参
(三)方法参数的值传递机制
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
Java的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
- 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
- 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
(四)递归方法
- 递归方法:一个方法体内调用方法自身。
- 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
- 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
例:
int count;
public static void main(String[] args){
recursion(5);
}
public int recursion(int k){
count++;
System.out.println("count:" + count + ",k:" + k);
if(k <= 0){
return 0;
}
return recursion(k-1) + recursion(k - 2);
}
参考:
4. https://zhidao.baidu.com/question/232596014.html