重载方法
Java中支持多态性的方式之一
支持多个不同参数的方法共享方法名称,通过传入的参数来判断调用哪个具体方法
class OverloadDemo{
void test(){
System.out.println("test1");
}
void test(int a){
System.out.println("test2");
}
void test(int a,int b){
System.out.println("test3");
}
}
class Overload{
public static void main(String args[]){
OverLoadDemo ob = new OverloadDemo();
ob.test();//调用无参的方法
ob.test(10);//调用1个int参数的方法
ob.test(10,20);//调用2个int参数的方法
}
}
对象可以作为参数
可以将对象作为参数传递给方法
参数的传递
传递的形式分为:值传递,引用传递
基本类型的参数,使用的是值传递
其它类型的参数,使用的是引用传递
参数使用值传递,相当于创建该值的一个副本,修改该参数,不会影响原值
参数使用引用传递,相当于把参数指向和原值所指向的同一个对象,所以修改参数值的时候,实际上是在修改其所指向的对象,所以原值也会一齐变化。
对象可以作为返回值
可以讲对象作为参数的返回值返回
递归算法
方法可以调用自己实现递归算法
访问控制
为了使类可以更好地封装,我们系统可以把类当作一个黑盒子,只对外暴露可以访问的成员
Java提供了访问修饰符来实现这种封装
public:成员被public修饰,可以被任何代码访问,无修饰符时默认为public
private:成员被private修饰,该成员只能被所属类的其它成员访问
protected:涉及继承才会使用下章介绍
static
用于声明类本身的成员,而不是对象的成员
限制:
1、只能直接调用其它静态方法
2、只能直接访问静态数据
3、不能引用this或super关键字
class UseStatic (
static int a * 3;//静态变量
static int b;//静态变量
static void meth(int x) {//静态方法
System.out.println("x:" + x);
System.out.println("a:" + a);
System.out.println("b:" + b);
static (//静态代码块,会在加载此类时运行,整个程序生命周期仅运行一次
System.out.println("Static block initialized");
b = a * 4;
}
public static void main (String args[]) {
meth(42);//调用静态方法
}
}
静态方法、静态变量也可以看作是Java中的全局方法和全局变量
final
可以用于声明变量或者方法
//声明变量,可以将变量定义成常量
//代表整个程序生命周期,他的值不能改变
//约定写法为全大写
final int FILE_NEW = 1;
final声明方法与声明变量的用法有本质区别,下章讨论final声明方法的用法
重新审视数组
数组的length成员
只反映最初设计时数组所能包含的元素数量
int a1[] = new int[10];
System.out.println("length is " + a1.length);
嵌套类和内部类
嵌套类:在一个类的内部再定义一个类,这个再定义的类称为嵌套类;外部的类称为包含类
限制:
1、嵌套类不能独立于包含类存在
2、嵌套类可以访问包含类的成员(含私有成员)
3、包含类不能访问嵌套类的成员
4、嵌套类可以作为包含类的成员声明;也可以在代码块中声明
嵌套类按是否静态可以分为2种:静态的、非静态的
因为静态嵌套类只能访问包含类的静态成员,只能通过对象访问包含类的非静态成员,所以很少这样使用
非静态的嵌套类称为【内部类】
class outer
int outer_x = 100;
void test(){
Inner inner = new Inner();
inner.display();
}
//内部类
class Inner{
void display{
System.out.println("display: outer_x ="+ outer_x);
}
}
//代码块中定义内部类
void test2(){
for(int i=0;i<10;i++){
class Inner2{
void display(){
System.out.println("display:outer_x = " + outer_x);
}
}
Inner inner = new Inner();
inner.display();
}
}
}
class InnerClassDemo{
public static void main(String args[])(
Outer outer new Outer();
outer test();
}
}
String类介绍
Java中每个字符串,包括变量和常量,都是一个String对象
//多种方式构造字符串
String myString = "this is a test";
//引用
System.out.println(mySting);
//Java为String对象定义了“+”运算符
String myString1 = "I" + " Love You";
//常用方法
//equals方法判断相等
if(str1.equals(str2))
System.out.println("equals");
//length方法获取长度
if(str1.length()==0)
System.out.println("空字符串");
//charAt方法获取字符
System.out.println("equals".charAt(0));
//常见错误,2个相同字符串是不相等的,因为是2个对象
if("yes"=="yes")
System.out.println("Yes");
varargs:可变长度参数
限制:
1、一个方法最多只有一个可变长度参数
2、可变长度参数必须放到最后
class VarArgs{
static void vaTest(int ... v){
for(int x : v){
System.out.println(x);
}
}
}