【Java 8】八、方法和类深入分析

重载方法

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);
    }
  }
}

你可能感兴趣的:(【Java 8】八、方法和类深入分析)