关于命名

class SuperClass {
	
    public static void main(String[] args) {
 System.out.println("SuperClass");          
		}
}
class SubClass extends SuperClass {
   
    public static void main(String[] args) {
 System.out.println("SubClass");    
		}
}

没有public类,这段源程序随意命名(扩展名必须是java),我把它命名为Test.java,编译后的字节码文件为SubClass.class和SuperClass.class,如果其中一个类为public的,则源文件名也必须是类名。当然,一段源程序也不可以存在多个public的类。

变量包括域(field)、局部变量和形参。

类中未初始化的域将自动设置为缺省值,缺省值取决于该域的类型。

public class Test {
 public int i;
 public static void main(String[] args) {
	Test t=new Test();
       	System.out.println(t.i);//输出:  0   
	}
}

变量在初试化之前没有定义,不能使用未赋值的变量。

public class Test {
	public static void main(String[] args) {
		int i;
		int j=i+1;
	}
}

java 多个点 生成geometry_System

初始化器

当说明一个域时,可指定一个相应类型的值对该域进行初始化,等号后面是一个表达式,称为初始化器。

初始化器不一定是常量,也可以是另一个已声明过的域、方法调用(方法可以后面定义)、或由它们构成的表达式。

class X {
	int x=y;//不能使用未声明的域
	int y=method();//可以使用后面定义的方法
	int z=y;
	int method() { return 3;}
	public static void main(String[] args) {
		X r=new X();
		System.out.println(r.x+", "+r.y+", "+r.z);
	}
}

 访问控制

一个类的所有域和方法都可被类本身代码访问。

一个类及其域和方法在其他类中能否被访问,由访问控制(修饰)符决定。

类的访问控制修饰符:public, package(缺省)

public类可以被所有其他类访问;

package类可以被同一包中所有其他类访问;

“访问”指的是这个类作为整体是可见和可使用的,即用来创建对象、派生子类、访问这个类(对象)可见的成员; 类的可见性只是其成员可见性的必要条件。

类成员的访问控制修饰符:public, protected, package(缺省), private

private成员只能在本类中被访问;

package成员可在同一包内所有类中被访问;

protected成员可在三种类中被访问:类自身、同一包内的其他类、其他包中该类的子类;

public成员可以在能访问该类的类中被访问。

注意:private成员在子类中被继承,但不能直接访问 

class MyClass {
	private int x=1;
	int getX() {return x;}
	void setX(int y) {x=y;}
} 
class MySubClass extends MyClass {
	int z=2;
	public static void main(String[] args) {
		MySubClass o=new MySubClass();
		//System.out.println(o.x);//报错
		System.out.println(o.getX());  //1
		o.setX(4);
		System.out.println(o.getX());//4
	}
}

构造器

给新创建对象的域赋初值,由构造器完成。 构造器与类同名,可以有多个参数,也可以没有。 不是方法,没有返回类型。

利用new创建对象的过程包含了调用构造器的过程,顺序是,一个新创建对象的实例变量先被指定为它们的缺省值,然后执行显式的初始化,最后调用构造器。

构造器可具有任何类成员同样的访问修饰符,但它不是类的成员。构造器不能被继承。

一个构造器可调用同类中的另一个构造器:使用this()作为第一条可执行语句,这称为显式构造器调用,也可以有参数。

显式构造器调用的实参不能包含当前对象的任何成员,这是因为当前对象尚处于构造阶段。

如果在一个类中未提供任何形式的构造器,Java语言将提供一个不做任何事的缺省的无参构造器。 缺省构造器与其相应的类具有相同的访问控制。

拷贝构造器—当前对象类型作为形参, 与C++不同,Java并不自动提供缺省的拷贝构造器!!!

Body(Body other){
	idNum = other.idNum;
	name = other.name;
	orbits = other.orbits;
}

null不是任何类型的实例,因此对任何Type而言:null instanceof Type  总是false