JAVASE学习总结(11)

native关键字:要往下调C/C++的代码了

static:体现了随着类的加载而加载  final:体现不能变

属性大写:常量

staitc存在于方法区的静态域当中(静态:static 域:field/属性         专门给static准备的(类当中声明为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用来修饰一个类:此类不能被其他类所继承

扫描二维码关注公众号,回复: 13481828 查看本文章

比如: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() {
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_61551764/article/details/121751483
今日推荐