native关键字:要往下调C/C++的代码了
static:体现了随着类的加载而加载 final:体现不能变
属性大写:常量
staitc存在于方法区的静态域当中(静态:static 域:field/属性 专门给static准备的(类当中声明为static的属性))
子类之所以能调用父类的属性和方法,是因为调用父类的构造器,就会加载父类
构造器不能重写,只能重载
多态的举例:方法名 (形参列表(里面是某类类型,恰巧此类又是抽象类,那只能传入子类对象))
求1000里的质数: for(int i = 2;i <= 1000;i++){ boolean isFlag = true; for(int j = 2;j <= Math.sqrt(i);j++){ if(i % j == 0){ isFlag = false; break; } } if(isFlag){ System.out.println(i); } }
一。final关键字
final:最终的
1.final可以用来修饰的结构:类,方法,变量
2.final用来修饰一个类:此类不能被其他类所继承
比如:String类,System类,StringBuffer类(该有的功能都有了,直接调就行了)
3.final用来修饰一个方法:表明此方法不可以被重写
比如:Object类中getClass() (功能简洁明了,不需重写)
4.final用来修饰变量,此时的变量就是一个“常量”
4.1final修饰属性:可以考虑赋值的位置有:显式初始化,代码块中初始化,构造器中初始化
4.2final修饰局部变量:尤其是使用final修饰形参时,表明此形参是一个常量,当调用此方法时,给常量形参赋一个实参,一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。
static final 用来修饰属性(也可以是方法),是全局变量
public class Something{
public static void main(String[] args){
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o){
//o = new other();//这里不对,相当于改了o
o.i++;
}
}
class Other{
public int i;
}
这段代码是对的,O是final的,但i不是的,可以改里面的属性
二。抽象性/abstract关键字的使用
1.abstract意思:抽象的
2.abstract可以用来修饰的结构:类,方法
3.abstract修饰类:抽象类
>此类不能实例化
>抽象类中一定有构造器,便于子类实例化时调用
>开发中,都会提供抽象类的子类,让子类对象实例化,完成相关操作
4.abstract修饰方法:抽象方法
>抽象方法只有方法的声明,没有方法体
抽象方法:public abstract void eat(); 没有{}
>包含抽象方法的类,一定是一个抽象类,反之,抽象类可以没有抽象方法
>若子类重写了父类中的所有的抽象方法后,此子类方可实例化(父类,父类的父类)
若子类没有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstract来修饰
ps:1.abstract不能用来修饰属性,构造器等结构
2.abstract不能用来修饰私有方法(子类中无法调用)静态方法(static不能重写,但abstract一定要重写。)final的方法,final的类(理由同上)
抽象类就是比普通类多定义了抽象方法,除了不能直接进行类的实例化操作之外,并没有任何其他的不同
5.匿名子类的匿名对象
/*
* 抽象类的匿名子类
*
*/
public class PersonTest {
public static void main(String[] args) {
method(new Student());//匿名对象
Worker worker = new Worker();
method1(worker);//非匿名的类非匿名的对象
method1(new Worker());//非匿名的类匿名的对象
System.out.println("********************");
//创建了一匿名子类的对象:p
Person p = new Person(){
@Override
public void eat() {
System.out.println("吃东西");
}
@Override
public void breath() {
System.out.println("好好呼吸");
}
};
method1(p);
System.out.println("********************");
//创建匿名子类的匿名对象
method1(new Person(){
@Override
public void eat() {
System.out.println("吃好吃东西");
}
@Override
public void breath() {
System.out.println("好好呼吸新鲜空气");
}
});
}
public static void method1(Person p){
p.eat();
p.breath();
}
public static void method(Student s){
}
}
class Worker extends Person{
@Override
public void eat() {
}
@Override
public void breath() {
}
}