【Java学习】07.方法和类的深度分析
这篇博客我们来深入的方法和类,包括重载、参数传递以及递归。讨论访问控制,static关键字以及重要的Java的几种内置类,如String
方法
方法的重载与重写
重载
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
例子如下:
public class Overloading {
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
//以下两个参数类型顺序不同
public String test(int a,String s){
System.out.println("test3");
return "returntest3";
}
public String test(String s,int a){
System.out.println("test4");
return "returntest4";
}
public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}
java有时会通过自动类型转换来寻找匹配的形参。
重写
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
因为这个涉及到类的继承,我们在继承之后来详细举例说明,这里仅做一个介绍:
参数传递
将对象作为参数
对象参数最常见于构造函数,使用时就像是使用内建类一样。传递形参的类型,是对象的类的名称。
参数传递的深入分析
传递参数时,如果使用的是基本类型的参数,那么直接传递参数的值,如果传递的是引用类型,那么传递的则是对象的地址。
下面说一下形参和实参:
实参(argument):
全称为"实际参数"是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
形参(parameter):
全称为"形式参数" 由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。
返回对象
Java函数通过函数前添加类型来规定函数的返回值,那么返回对像呢?
同样的道理,在函数前返回写上返回对象的类名就可以了
递归
递归就是函数调用自己,相当于一个循环,一定要规定好递归的出口这个很重要。
下面是一个递归的例子——利用递归来计算阶乘:
int fact(int n) {
int result;
if (n == 1) {
return 1;
}
result = fact(n - 1) * n;
return result;
}
访问控制
Java的访问控制符包括public、private、protected、default,这个我在02篇的文章末尾中提到过:
- private(当前类访问权限):如果类里的一个成员(包括成员变量、方法和构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问。很显然,这个访问控制符用于修饰成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该类的内部。
- default(包(package)访问权限):如果类里的一个成员(包括成员变量、方法和构造器等)或者一个外部类不使用任何访问控制修饰,就称它为包访问权限的,default访问控制的成员或外部类可以被相同包下的其他类访问。
- protected(子类访问权限):如果一个成员(包括成员变量、方法和构造器等)使用protected访问控制符修饰,那么这个成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问。在通常情况下,如果使用protected来修饰一个方法,通常是希望其子类来重写这个方法。
- public(公共访问权限):这是一个最宽松的访问控制级别,如果一个成员(包括成员变量、方法和构造器等)或者一个外部类使用public访问控制符修饰,那么这个成员或外部类就可以被所有类访问,不管访问类和被访问类是否处于同一个包中,是否具有父子继承关系。
类的深入探究
嵌套类
Java 语言中允许在另外一个类中定义一个类,这样的类被称为嵌套类。包含嵌套类的类称为外部类,被包含的类称为内部类。
几个重要类
数组
这里先不做介绍,具体的内容可以参考菜鸟教程-Java数组
String
这里先不做介绍,具体的内容可以参考菜鸟教程-String类