何为关键字? -----------指一些已经赋予了指定含义的词语。
< 一 >. 常用Java关键字
类相关: public, private, protected, class, implements,extends,interface, import,abstract;
方法函数/属性相关:void,return,static,final;
八大基本数据类型:int ,short, byte ,long,char, boolean, double, float;
循环判断相关:for, while,if,else,do, switch,case,default,break;
异常相关:try, catch, throw, throws, finally;
其他相关:new,this,super;
保留字相关:goto,const;
< 二 >.关键字详解
1. public,private,default,protected 访问权限介绍
1 . 1 测试当前类访问权限
先创建一个学生类(属性有姓名(public),年龄(protected),学号(default),性别(private))
<pre name="code" class="java"><span style="font-size:18px;">package Date_07_05;
public class Student {
public String name;
protected int age;
int number;
private String sex;
public void test()
{
Student stu = new Student();
stu.name = "张三";
stu.age = 12;
stu.number = 1234;
stu.sex = "男";
}
}</span>
程序通过------可以知道,public,protected,default,private修饰的属性,在当前类中可以被访问;
1 . 2 测试同包不同类访问权限
再创建一个测试类,两者在同一个包下。
<span style="font-size:18px;">package Date_07_05;
public class Test {
public static void main(String[] args) {
Student stu = new Student();
stu.name = "张三";
stu.age = 12;
stu.number = 1234;
stu.sex = "男";//此处会报错显示 The value of the field Student.sex is not used
}}</span>
程序报错------可知 public,protected,default修饰的属性,在同包下不同类中可以被访问,而private修饰的属性不可以被访问;
1 . 3 测试同包子类访问权限
创建一个大学生子类继承student类
<span style="font-size:18px;">package Date_07_05;
public class UnStudent extends Student {
public static void main(String[] args) {
UnStudent us = new UnStudent();
us.name = "张三";
us.age = 12;
us.number = 1234;
us.sex = "男";//此处报错:The field Student.sex is not visible
}
}</span>
程序报错----- 可知public,protected,default修饰的属性,在同包下子类中可以被访问,而private修饰的属性不可以被访问;
1 . 4 测试不同包子类访问权限
创建一个大学生类继承于学生类(位于另一个包)
<span style="font-size:18px;">package Date_07_05_2;
import Date_07_05.Student;
public class UnStudent extends Student{
public static void main(String[] args) {
UnStudent us = new UnStudent();
us.name = "张三";
us.age = 12;
us.number = 1234;// 此处报错:The field Student.number is not visible
us.sex = "男";//此处报错: The field Student.number is not visible
}
}</span>
程序报错---- 可知public,protected修饰的属性,在不同包下子类中可以被访问,而default,private修饰的属性不可以被访问;
1 . 5 测试不同包访问权限
<span style="font-size:18px;">package Date_07_05_2;
import Date_07_05.Student;
public class UnStudent{
public static void main(String[] args) {
Student us = new Student();
us.name = "张三";
us.age = 12;// 此处报错:The field Student.number is not visible
us.number = 1234;// 此处报错:The field Student.number is not visible
us.sex = "男";//此处报错: The field Student.number is not visible
}</span>
<span style="font-size:18px;">}</span>
程序报错---- 可知public修饰的属性,在不同包下可以被访问,而protected,default,private修饰的属性不可以被访问;
总结
同类 | 同包 | 不同包下子类 | 其他包 | |
private | 是 | |||
default | 是 | 是 | ||
protected | 是 | 是 | 是 | |
public | 是 | 是 | 是 | 是 |
2. this,super 关键字详解
2 . 1 this详解
this调用当前类的对象:this .方法名(),this.属性名 , this . ();
<span style="font-size:18px;">package Date_07_05;
import java.io.Console;
public class Student {
public String name;
protected int age;
int number;
private String sex;
public Student()
{
this("b");
System.out.println("第一行");
}
public Student(String a)
{
System.out.println("第二行");
}
public void study(){
//this 调用当前对象的属性
this.name = "张三";
this.age = 12;
this.number = 1234;
this.sex = "男";
//this调用当前对象的方法
this.paly();
System.out.println("学习");
}
public void paly(){
System.out.println("踢足球");
}
public static void main(String[] args) {
//this调用构造函数
Student stu = new Student();
stu.study();
}
}</span>
输出结果为: 第一行
张三踢足球
李四踢足球
张三踢足球
注意:this()和super()调用必须出现在第一行,否则程序报错;
3 . final 关键字详解
作用域:类、方法、属性、参数、局部变量
类:修饰类无法被继承;
方法:修饰方法无法被重写;
属性:修饰属性只能被赋值一次;
参数/局部变量:修饰参数/局部变量在生命周期内不能重新被赋值
4 . static 关键字详解
作用域:方法,属性,静态块。
方法:静态方法可以直接通过类名调用,任何的实例也都可以调用。
属性:静态变量在内存中只有一个拷贝,JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问,当然也可以通过对象来访问(但是这是不推荐的)。
<span style="font-size:18px;">package Date_07_05;
import java.io.Console;
import org.omg.CORBA.PUBLIC_MEMBER;
public class Student {
public String name;
public static String address;;
//加载类的时候自动执行
static{
System.out.println("执行了静态快");
}
//创建类的对象的时候自动执行
{
System.out.println("执行了代码块");
}
package Date_07_05;
public class Test {
public static void main(String[] args) {
Student stu1 = new Student();
Student stu2 = new Student();
stu1.address = "衡阳";
stu2.address = "长沙";
Student.address = "广州";
System.out.println(stu1.address);
System.out.println(stu2.address);
System.out.println(Student.address);
stu1.name = "张三";
stu2.name = "李四";
System.out.println(stu1.name);
System.out.println(stu2.name);
}
}</span>
程序输出结果: 执行了静态快
执行了代码块
执行了代码块
广州
广州
广州
张三
李四