Java基础-方法和类

参数传递的深入分析

当为方法传递基本类型时,使用值传递,因此会得到实参的副本,并且对接收实参的形参进行操作,对方法的外部没有影响。

当为方法传递对象时,情况就完全不同了,因为对象时通过引用调用传递的。当将对象传递给方法时,引用本身是使用值调用传递的。但是,由于传递的值引用一个对象,因此值得副本仍然引用相应实参指向的同一个对象。

访问控制

Java的访问修饰符包括public、private以及protected。Java还定义了默认的访问级别。

public:可以被任何代码访问。

private:只能被所属类的其它成员访问。

理解static

被声明为静态的实例变量,在本质上是全局变量。当声明类的对象时,不会生成静态变量的副本。所有的实例共享相同的静态变量。

声明为静态的方法有以下几个限制:

  1. 它们只能直接调用其它静态方法;
  2. 它们只能直接访问静态数据;
  3. 它们不能以任何方式引用this或super关键字。

final介绍

final本质上是将变量变成了常量。这意味着final变量必须在声明时进行初始化。可以通过两种方式之一完成这个工作:第一种方式,可以在声明时为其提供一个值;第二种方式,可以在构造函数中为其赋值。

嵌套类和内部类

可以在类的内部定义另外一个类,这种类就是嵌套类。嵌套类的作用域被限制在包含它的类之中。如果类B在类A中定义,那么类B不能独立于A而存在。嵌套类可以访问包含它的类的所有成员,包括私有成员。但是,包含类(包含嵌套类的类)不能访问嵌套类的成员。

嵌套类分为两种:静态的和非静态的。静态嵌套类只能访问包含类的非静态成员,因为这条限制,很少使用静态嵌套类。

varargs:可变长度参数

可变长度参数通过三个点标识(...)。

static void vaTest(int ... v) {

以上方法v被隐式的声明为int[]类型。

注意:

  • 可变长度参数必须是方法最后声明的参数。
  • 一个方法试图声明第二个可变长度的参数是非法的。
  • 可以使用非varargs方法重载varargs方法。

varargs方法与模糊性

class varargs {
    static void test(int ... v) {code}
    static void test(boolean ... v) {code}
}

public static void main(String[] args) {
    varargs.test(); //Error: Ambiguous
}

因为可变长度参数可以为空,所以这个调用可以被转换为对test(int ...)或者test(boolean ...),两者都是合法的。因此这个调用实际上是含糊不清的。

原文地址:https://www.cnblogs.com/chris-jichen/p/9801993.html