一个源文件中只能有一个public类,可以有多个非public类,源文件的名称应该和public类的类名保持一致。
new对象时,Java会进行如下步骤:
JVM再堆内存中开辟空间,存储新对象。
对象类中的属性跟随对象一起进入到堆内存中(此时把对象当作一个容器,属性是容器里的内容)。
为属性赋默认值(String为null,double为0.0)。
JVM将对象的地址传给接受方
java中有类变量、成员变量和局部变量:
类变量:也称为静态变量,在类中以 static 关键字声明,类只拥有类变量的一份拷贝。通常什么味常量,若不是常量就可以修改。代码如下:
public static int b = 111;
public static void main(String[] args)
{
b = 222;
System.out.println(b+"");//输出222
}
}
成员变量:跟着对象走,对象创建的时候创建,有自己的默认值,不赋值可以使用,在对象被销毁的时候销毁。
局部变量:声明在方法、构造方法或者语句块中。访问修饰符不能用于局部变量。局部变量是在栈上分配,没有默认值,被声明后必须经过初始化才可以使用。如下代码报错:
public void pupAge()
{
int age;//未初始化
age = age + 7;
System.out.println("" + age);
}
父类更通用,子类更具体。
继承减少了代码的大量冗余。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
下面代码反映了多态性
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public void move(){
System.out.println("狗可以跑和走");
}
public void bark(){
System.out.println("狗可以吠叫");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
a.move();// 执行 Animal 类的方法
b.move();//执行 Dog 类的方法
b.bark();//b的引用类型animal没有break方法
}
}
编译结果如下:
TestDog.java:30: cannot find symbol
symbol : method bark()
location: class Animal
b.bark();
重写方法的返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类。
重写方法的访问权限不能比父类中被重写的方法的访问权限更低。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
重载(overload) 是在同一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法都必须有一个独一无二的参数类型列表。
被重载的方法可以改变访问修饰符。被重载的方法可以声明新的或更广的检查异常。
多态是同一个行为具有多个不同表现形式或形态的能力。
多态三要素:继承、重写、父类引用指向子类对象。
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
抽象方法只包含一个方法名,而没有方法体。
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象类会强制其子类重写抽象方法,这就是抽象类的设计思想,保证体系功能的完整性。
abstract不能与private共存,abstract不能与static共存,abstract不能与final共存。
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
成员变量用private修饰,加getter()、setter方法。
类描述对象的属性和方法。接口则包含类要实现的方法。
接口不能包含成员变量,除了public static final 变量。
接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
标记接口是没有任何方法和属性的接口,它仅仅表明它的类属于一个特定的类型,主要用于建立一个公共的父接口或向一个类添加数据类型。
java的包可以把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
java.lang包中打包了java最基础的类。
如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。
同一个包中的类可以相互调用而不用import。