今天的博客主题
基础篇 --》编程基础 --》Java常用关键字
访问控制关键字
关键字 | 翻译 | 含义 |
public | 公共的 | 关键字应用于类、方法、变量的访问控制修饰。public修饰的类,方法,变量在整个项目的所有类都可以被访问使用。 |
protected | 受保护的 | 关键字应用于类、方法、变量的访问控制修饰。只有本类和同一包里的其他类还有不同包里的子类可以使用。 |
default | 默认的 | 关键字应用于类、方法、变量的访问控制修饰。只有本类和同一包里的其他类可以使用,不写的话就是默认的。 |
private | 私有的 | 关键字应用于类、方法、变量的访问控制修饰。只有本类可以使用,但是需要生成set get 方法才能够被其他的类去调用(赋值和取值)。 |
类、方法、变量修饰符
关键字 | 翻译 | 含义 |
class | 类 | 用来声明新的Java类,类是面向对象的程序设计方法的基本构造单位。 类是对象的模板。每个对象都是类的一个实例。要使用类,通常使用 new 操作符将类的对象实例化,然后调用类的方法来访问类的功能 |
abstract | 声明抽象 | 1.修饰类(抽象类) 1-1.抽象类可被继承,不可以被实例化(new) 1-2.抽象类里面可以拥有普通的方法 1-3.例子:public abstract class 类名(){...} 2.修饰方法(抽象方法) 必须写在抽象类里面 2-1.例子:public abstract 返回值类型 方法名(); 普通方法和抽象方法区别 普通方法:有方法体(大括号里面那一堆)并且不用分号结尾 抽象方法:用abstract修饰 无方法体(不写大括号里面那一堆连大括号都不写) 并且以分号结尾 普通方法例子:public 返回值类型 方法名(){...} 抽象方法例子:public abstract 返回值类型 方法名(); 3.在以下任一条件成立时,类必须定义成抽象类 3-1.类中有至少一个抽象方法 3-2.类继承了父类中的抽象方法,但是至少有一个抽象方法没有实现。 3-3.类实现了某个接口,但没有全部实现接口中的方法(接口是一个特殊的抽象类) |
extends | 继承 | 子类继承父类(public class Son extends Parent{...}) 子类会拥有父类所有的属性和方法 一个子类只能有一个父类 一个父类可以有多个子类 子类继承父类,父类派生子类 |
final | 最后的、最终的 不可更改的 | 可以修饰类、方法、属性 被修饰的类不能被继承 修饰类(public final class 类名{}) 被修饰的方法不能被重写(但是可以被重载) 修饰方法(public final void 方法名(){}) 被修饰的属性只能被读取,而不能够被更改 常量:被修饰的属性称之为常量 注意:被修饰的属性必须赋值 修饰属性(public final 数据类型 属性名全大写 = value) |
implements | 实现 | 用来实现一个接口,实现一个接口的时候 一定要实现该接口里面所有的抽象方法,否则报错。 一个普通类可以实现多个接口,中间以逗号(,)隔开 例:public class Student implements Person, Person1 {} |
interface | 接口 | 接口是一个特殊的抽象类 接口不可以被 new 例:public interface Person {} 接口类里面不允许出现普通方法,只能是抽象方法 例:public abstract 返回值类型 方法名(); 接口类里面抽象方法前的(abstract)这个关键词可以省略不写 接口里可以出现属性,但必须是常量 常量:以 final 修饰的属性并且拥有初始值,不可以被更改 例:public [static] final String name = "小明"; 接口之间可以互相继承,继承多个接口时逗号隔开 例:public interface person extent person1,person2{} |
static | 静态 | 修饰类 一个普通类是不能被修饰为静态类,只能修饰一个普通类中的内部类,那么这个被修饰的内部类就是静态类。
修饰方法 修饰方法时,那么这个方法时静态方法。在JVM装载类的时候,该方法就进入了栈中的静态方法内存区等待被执行。使用这个静态方法时,不用实例化当前对象就能直接类名.方法名来使用。 例:public static void 方法名(){} 修饰变量 修饰变量时,该变量就是静态变量,也称为类变量。值可有可无。JVM 装载该类时,这个变量就被初始化并分配内存空间。 该变量可被当前类所有对象公用。 例:public static int anInt = 1; 或 public static int anInt; 修饰代码块 修饰一个代码块时,这个静态代码块,在JVM装载该类时,就载入当前静态代码块,并执行该代码块。相当于直接初始化。 例:static{anInt = 1} 那代码块没有被修饰呢?没有被static的代码块就是普通代码块。 例:{anInt = 2} 普通代码块和静态代码块的区别 执行时间不一样,普通代码块是实例化对象的时候所执行,就是实例化一次,执行一次。 而静态代码块,在JVM加载类的时候就执行了,只执行一次。 注意 static方法内部是不可以调用非static方法。但是反之可以。因为非static方法是要与对象绑定在一起的,而static方法可以直接通过类名来调用,不需要创建对象的。如果想在static方法内部是调用非static方法,必须实例化对象后,才可以通过这个对象调用非static方法。 说白了就是,在一个非static方法被static方法调用时,还没有创建任何实例对象,此时如果从static内部发出对非static方法的调用,那么非static方法是无法关联到对象的。也就是找不到。所以static方法内部是不能发出对非static方法的调用。 |
synchronized | 同步的 | 修饰一个类,其作用的范围是synchronized后面括号括起来的部分,作用于主的对象是这个类的所有对象。 修饰一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象。 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象。 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象。 先知道这个关键字能用在什么地方,后面会着重讲到这个关键字。 |
volatile | 易变的 | 用于表示可以被多个线程异步修改的成员变量。 许多Java虚拟机中都没有实现。volatile的目标用途是为了确保所有线程所看到的指定变量的值都是相同的。 volatile可以看作是一种轻量级的synchronized,与 synchronized相比volatile所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是synchronized的一部分。 所以也就没有被大部分的Java虚拟机所实现。 |
流程控制语句
关键字 | 翻译 | 含义 |
if | 如果 | 有条件的执行代码块。条件的计算结果必须是布尔值。 if 语句有可选的 else 子句,该语句的条件为 false 时将执行的 else 里代码块。 包含 boolean 操作数的表达式只能包含 boolean 操作数。 例:if(true){} |
else | 否则 | 与 if 关键字结合使用。else 子句是可选的,如果 if 条件为 false,则执行该子句。 例:if(false){代码块}else{代码块} |
switch | 开关、观察 | 用于基于某个表达式选择执行多个代码块中的某一个。 switch 条件的计算结果必须等于 byte、char、short 或 int JDK1.7之后支持string |
case | 返回switch结果 | 与switch语句结合使用 case 用来标记 switch 语句中的每个分支。 case 块没有隐式结束点。break 语句通常在每个 case 块末尾使用,用于退出 switch 语句。 如果没有 break 语句,执行流将进入所有后面的 case 和/或 default 块。 |
for | 循环语法 | 用于指定一个在每次迭代结束前检查其条件的循环。 for 语句的形式为 for(initialize; condition; increment) 控件流进入 for 语句时,将执行一次 initialize 语句。 每次执行循环体之前将计算 condition 的结果。如果 condition 为 true,则执行循环体。 每次执行循环体之后,在计算下一个迭代的 condition 之前,将执行 increment 语句。 例:for(int i = 0; i < 10; i++){代码块} |
while | 循环语法 | 用于指定一个只要条件为真就会重复的循环。 例:while(true){} |
do...while | 循环语法 | 用于指定一个在每次迭代结束时检查其条件的循环。 do 循环体至少执行一次。 条件表达式后面必须有分号。 例:do{代码块;步长++}while(false); |
break | 跳出、中断 | 用于提前退出 for、while 或 do 循环。 在 switch 语句中用来结束 case 块。 总是退出最深层的 while、for、do 或 switch 语句。 |
continue | 继续 | 用来跳转到 for、while 或 do 循环的下一个循环里。 总是跳到最深层 while、for 或 do 语句的下一个迭代。 |
return | 返回 | 会导致方法返回到调用它的方法,从而传递与返回方法的返回类型匹配的值。 如果方法具有非 void 的返回类型,return 语句必须具有相同或兼容类型的参数。 返回值两侧的括号是可选的。 |
default | 默认 | 用来标记 switch 语句中的默认分支。 default 块没有隐式结束点。break 语句通常在每个 case 或 default 块的末尾使用,以便在完成块时退出 switch 语句。 如果没有 default 语句,其参数与任何 case 块都不匹配的 switch 语句将不执行任何操作。 如有用到switch语句切记写上default,来保证都不满足case之外的情况。 |
异常关键字
关键字 | 翻译 | 含义 |
try | 捕获异常 | 用于包含可能引发异常的语句块。 每个 try 块都必须至少有一个 catch 或 finally 子句。 如果某个特定异常类未被任何 catch 子句处理,该异常将沿着调用栈递归地传播到下一个封闭 try 块。 如果任何封闭 try 块都未捕获到异常,Java 解释器将退出,并显示错误消息和堆栈跟踪信息。 |
catch | 处理异常 | 用来在 try-catch 或 try-catch-finally 语句中定义异常处理块。 就是出现异常后你所要做的措施 开始和结束标记 { 和 } 是 catch 子句语法的一部分,即使该子句只包含一个语句,也不能省略这两个标记。 catch可以省略不写,但是必须要写上finally,否则要报错。 |
finally | 必定执行的 | try、catch 和 finally (捕获异常的铁三角) 放在try和catch的后面,不管有没有异常,这个里面的代码段一定会执行,可以省略不写。 |
throw | 抛出异常 | 用于引发异常。throw 语句将 java.lang.Throwable 作为参数。Throwable 在调用栈中向上传播,直到被适当的 catch 块捕获。 引发非 RuntimeException 异常的任何方法还必须在方法声明中使用 throws 修饰符来声明它引发的异常。 |
throws | 声明异常 | 应用于方法,以便指出方法引发了特定类型的异常 throws 关键字将逗号分隔的 java.lang.Throwables 列表作为参数。 引发非 RuntimeException 异常的任何方法还必须在方法声明中使用 throws 修饰符来声明它引发的异常。 要在 try-catch 块中包含带 throws 子句的方法的调用,必须提供该方法的调用者。 |
包关键字
关键字 | 翻译 | 含义 |
import | 导入 | 用来引入需要的包。 |
package | 包 | 定义包的关键字。 |
数据类型关键字
关键字 | 翻译 | 含义 |
byte | 字节型 | 8bit 取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) |
char | 字符型 | 16bit |
boolean | 布尔型 | 只有true(真)和false(假) |
short | 短整型 | 16bit 取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1) |
int | 整型 | 32bit 取值范围为(-2147483648~2147483647) 占用4个字节(-2的31次方到2的31次方-1) |
float | 浮点型 | 32bit |
long | 长整型 | 32bit 取值范围为(-9223372036854774808~9223372036854774807) 占用8个字节(-2的63次方到2的63次方-1) |
double | 双精度 | 64bit |
变量引用
关键字 | 翻译 | 含义 |
super | 父类,超类 | 用于引用使用该关键字的类的超类。 作为独立语句出现的 super 表示调用超类的构造方法。 super.<methodName>() 表示调用超类的方法。 只有在如下情况中才需要采用这种用法:要调用在该类中被重写的方法,以便指定应当调用在超类中的该方法。 |
this | 本类 | 用于引用当前实例。 当引用可能不明确时,可以使用 this 关键字来引用当前的实例。 |
void | 无返回值 | void 关键字表示 null 类型。 void 可以用作方法的返回类型,以指示该方法不返回值。 |
other
关键字 | 翻译 | 含义 |
Override | 重写 | 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常 |
Overload | 重载 | 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。 重载规则: 被重载的方法必须改变参数列表(参数个数或类型不一样); 被重载的方法可以改变返回类型; 被重载的方法可以改变访问修饰符; 被重载的方法可以声明新的或更广的检查异常; 方法能够在同一个类中或者在一个子类中被重载。 无法以返回值类型作为重载函数的区分标准。 |
这是Java中一些经常会用的关键字。后期如有遗漏常用关键字,会持续完善补充...
好记性不如烂笔头