美文网首页
java部分关键字总结

java部分关键字总结

作者: 朱朱今天撸代码了吗 | 来源:发表于2019-02-28 12:46 被阅读0次

abstract

抽象,用于定义抽象类,抽象函数。

抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类。

用法规则:

  • 用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,这个方法叫做抽象方法;

  • 含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写;

  • abstract类可以扩展(增加子类),但不能直接实例化;

  • 一旦类中包含了abstract方法,那类该类必须声明为abstract类。

  • 抽象类中不一定要包含abstract方法。

用法示例:

 abstract int add(int x,int y);
 int sub(int x,int y) { 
 return x-y;
 }
}
class B extends A {
 int add(int x,int y) {   //子类必须重写父类的add方法
 return x+y;
 }
}
public class Example5_12 {
 public static void main(String args[]) {
 B b=new B();
 int sum=b.add(30,20);            //调用子类重写的add方法
 int sub=b.sub(30,20);            //调用子类继承的sub方法
 System.out.println("sum="+sum);  //输出结果为sum=50
 System.out.println("sum="+sub);  //输出结果为sum=10
 A a;                             //抽象类声明对象
 a = b;                           //a是b的上转型对象
 sum=a.add(30,20);                //调用子类重写的方法
 sub=a.sub(30,20);                //调用子类继承的方法
 System.out.println("sum="+sum);  //输出结果为sum=50
 System.out.println("sum="+sub);  //输出结果为sum=10
 }
}

interface

接口,用于声明新的java接口,接口是方法的集合.接口就是用来被继承,被实现的,修饰符一般用public

用法规则:

  • 常量:接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上。

  • 方法:接口的方法只能是抽象方法,总是使用,即使定义时不添加public abstract修饰符,系统也会自动加上。(但是在后续的1.8版本中 取消了该定义 即接口之中也能有实现的方法)

  • 接口引用可以指向实现该接口的对象

用法示例:

[修饰符] (abstract) interface 接口名[extends 父接口1,父接口2...]  //接口可继承多个父接口(即:接口是多继承的);abstract若没写,系统会自动加上
{
0个到多个常量定义...
0个到多个抽象方法的定义...
}
​
//定义一个接口Output 
 interface Output 
{ 
 //接口里只能把属性定义成常量 
 int MAX_CACHE_LINE = 50;//主要是定义存储空间 
 //接口里定义的只能是public的抽象方法 
 void out(); 
 void getData(String msg);
} 
//定义一个接口Product 
interface Product 
{ 
 int getProduceTime(int a); 
} 

//让printer类实现定义的接口 
public class Printer implements Output,Product 
{ 
 private String [] printData = new String[MAX_CACHE_LINE]; 
 private int dataNum =0; 
 public void out()//重写父接口Output的方法 
 { 
 while(dataNum>0) 
 { 
 System.out.println("打印机打印"+printData[0]); 
 System.arraycopy(printData,1,printData,0,--dataNum); 
 } 
 } 
 public void getData(String msg)//重写父接口Output的方法 
 { 
 if(dataNum>=MAX_CACHE_LINE) 
 { 
 System.out.println("已满"); 
 } 
 else 
 { 
 printData[dataNum++] = msg; 
 } 
 } 
 public int getProduceTime(int a)//重写父接口Product的方法 
 { 
 return a = a; 
 } 
 public static void main(String[] args) 
 { 
 //父接口可声明变量,但是不能创建实例,多态:声明的是Output,但是创建的实例是Printer 
 Output O= new Printer(); 
 O.getData("xiuxiu"); 
 O.out();//直接调用输出的方法 

 //父接口可声明变量,但是不能创建实例,多态:声明的是Output,但是创建的实例是Printer 
 Product p = new Printer(); 
 System.out.println(p.getProduceTime(82)); 

 //所有接口类型的引用变量都可以直接赋值给Object类型的变量 
 Object obj = p; 
 Object obj1 = O; 

 } 

}

接口和抽象类的异同

相同:

1、都有抽象方法。

2、都不能创建实例。

3、子类继承其后都必须全部实现其内的抽象方法,如果没有全部实现的话,类只能定义成抽象类。

不同:

1、接口里只能有抽象方法,抽象类里可以有普通方法。(1.8之后不是了)

2、接口类里的属性默认有修饰语public static final,但是抽象类中的属性可以是普通的。

3、接口没有初始化块,抽象类里有。

4、接口可以有多个父接口,但是抽象类只能有一个父类。

final

用法规则

用于变量、方法、类。

  • 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

  • 当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。

  • 使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。类中所有的private方法都隐式地指定为final。

用法示例

class Person{
 public final String getName(){
 return "personal loan"
 }
}

class loan extends Person{
 @Override
 public final Stirng getName(){
 return "cheap personal loan";//compilation error: overridden method is final
 }
}

使用final的好处:

  • final关键字提高了性能。JVM和Java应用都会缓存final变量。

  • final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。

  • 使用final关键字,JVM会对方法、变量及类进行优化。

static

在《Java编程思想》P86页有这样一段话:

“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”

用于定义静态成员变量或方法,也就是成为附属于类的变量或方法。因此可以从类外部直接调用,而不用先实例化该类。类的成员变量在类的所有实例中只存在一个。

一句话就是方便在没有创建对象的情况下来进行调用(方法/变量)。

用法规则

  • 修饰成员变量和成员方法: 被 static 修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。被static 声明的成员变量属于静态成员变量,静态变量 存放在 Java 内存区域的方法区。

  • 静态代码块: 静态代码块定义在类中方法外, 静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 该类不管创建多少对象,静态代码块只执行一次

  • 静态内部类(static修饰类的话只能修饰内部类): 静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非static成员变量和方法。

  • 静态导包(用来导入类中的静态资源,1.5之后的新特性): 格式为:import static 这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法。

  • static不会影响作用域

  • static是不允许用来修饰局部变量

用法示例

public class Test extends Base{

 static{
 System.out.println("test static");
 }

 public Test(){
 System.out.println("test constructor");
 }

 public static void main(String[] args) {
 new Test();
 }
}

class Base{

 static{
 System.out.println("base static");
 }

 public Base(){
 System.out.println("base constructor");
 }
}
输出结果:
base static
test static
base constructor
test constructor

this

this关键字用于引用类的当前实例。

用法规则

  • this 调用本类中的其他构造方法时,也要放在首行。

  • this不能用在static方法中。

用法示例

class Manager {
 Employees[] employees;

 void manageEmployees() {
 int totalEmp = this.employees.length;
 System.out.println("Total employees: " + totalEmp);
 this.report();
 }

 void report() { }
}

super

super关键字用于从子类访问父类的变量和方法。

用法规则:

  • super 调用父类中的其他构造方法时,调用时要放在构造方法的首行!

  • super不能用在static方法中。

用法示例:

public class Super {
 protected int number;

 protected showNumber() {
 System.out.println("number = " + number);
 }
}

public class Sub extends Super {
 void bar() {
 super.number = 10;
 super.showNumber();
 }
}

synchronized

(待补充)

volatile

(待补充)

参考文章:

https://www.cnblogs.com/yihujiu/p/5990622.html

https://blog.csdn.net/rain722/article/details/78929943

https://www.cnblogs.com/chihirotan/p/6044056.html

https://www.cnblogs.com/dolphin0520/p/3799052.html

相关文章

网友评论

      本文标题:java部分关键字总结

      本文链接:https://www.haomeiwen.com/subject/gvshuqtx.html