Java中的关键字
一、什么是关键字?保留字?
1、关键字是指在编程语言中,已经赋予了固定意义,不能随意使用的单词。
2、保留字是指在编程语言中,暂时还没有赋予含义,不过也不能用于定义变量名和类名,因为后续再升级过程中可能会用到的单词。
3、有哪些关键字? Java目前共有50个Java关键字 const和goto这两个在Java语言中为保留字
4、关键字分类:
跟类相关:class、public、private、protected、package、new
跟方法相关:void、return
跟属性相关:final、static
基本数据类型(八大基本数据类型):int、float、double、char、boolean、long、short、byte
循环结构:while、for、do、break、continue
判断语句:if、else、switch、case
异常:try、catch、finally、final、throws、throw
其他:native、goto、join、instanceof、enum、this、super
跟方法相关:void、return
跟属性相关:final、static
基本数据类型(八大基本数据类型):int、float、double、char、boolean、long、short、byte
循环结构:while、for、do、break、continue
判断语句:if、else、switch、case
异常:try、catch、finally、final、throws、throw
其他:native、goto、join、instanceof、enum、this、super
二、常用关键字分析
1、访问权限修饰符
public:当前工程下的任何一个类文件中都可以访问
protected:当前包下的任何一个类和不同包下的子类可以访问
默认不写:当前包下的任何一个类可以访问
private:仅仅在当前类里面可以访问
注意
对类的访问权限修饰只能用:public和默认不写,不能用protected和private
对属性和方法访问权限修饰:public、protected、默认不写、private
一个java文件中可以有多个class类,但是只能有一个public修饰的类 或者都用默认不写的访问权限
protected:当前包下的任何一个类和不同包下的子类可以访问
默认不写:当前包下的任何一个类可以访问
private:仅仅在当前类里面可以访问
注意
对类的访问权限修饰只能用:public和默认不写,不能用protected和private
对属性和方法访问权限修饰:public、protected、默认不写、private
一个java文件中可以有多个class类,但是只能有一个public修饰的类 或者都用默认不写的访问权限
2、this和super关键字
this关键字
表示当前类的对象,用于指代调用当前方法所对应的对象地址
所表示的对象不固定
this可以调用属性、方法、和构造方法
this使用格式
this调用属性:this.属性名
this调用普通方法:this.方法名(参数)
this调用构造方法:this(参数);
所表示的对象不固定
this可以调用属性、方法、和构造方法
this使用格式
this调用属性:this.属性名
this调用普通方法:this.方法名(参数)
this调用构造方法:this(参数);
super关键字
表示父类类的对象,用于指代父类对象地址
所表示的对象不固定
super可以调用父类属性、方法、和构造方法
super使用格式
super调用属性:super.属性名
super调用普通方法:super.方法名(参数)
super调用构造方法:super(参数);
表示父类类的对象,用于指代父类对象地址
所表示的对象不固定
super可以调用父类属性、方法、和构造方法
super使用格式
super调用属性:super.属性名
super调用普通方法:super.方法名(参数)
super调用构造方法:super(参数);
请看下面的代码:分析为什么运行结果会是这样?这里也困惑了我很久
package com.huaxin.test3;
public class People {
public String name;
public People(){
System.out.println("无参构造方法被调用!");
}
public People(String name){
super();
System.out.println("有参构造方法被调用!");
}
public void study(){
System.out.println("人的study函数");
}
}
package com.huaxin.test3;
public class Student extends People{
/*
* 把这段代码注释掉或得到同样的运算结果
* 这就是继承父类的子类在new一个新的子类对象时会自动调用父类的构造函数,
* 这里调用的是父类的无参构造函数,当然也可以调用父类的有参构造函数,
* 不写时,会自动调用父类的无参构造函数;也就是说,构造子类对象时,一定会先有父类对象
*/
public Student(){
super();
}
public void study() {
super.study();
this.name = "王五";
super.name = "李四";
System.out.println("Student的学习方法");
}
}
package com.huaxin.test3;
public class Test {
public static void main(String[] args) {
Student stu = new Student();
stu.study();
System.out.println(stu.name);
}
}
运行结果:
分析:
执行Student stu = new Student();
这段代码时,会执行
public Student(){
super();
}
这段构造函数代码,就算你不写,也会默认在那里;
关于name的输出:
这段代码时,会执行
public Student(){
super();
}
这段构造函数代码,就算你不写,也会默认在那里;
关于name的输出:
内存中只有一个name属性,name属性是父类的,父类会自动关联子类,所有name只有一份;子类重写父类的方法时,会有另一片堆空间用来存放子类重写父类的方法,父类的方法也会存在;
this和super关键字看似简单,其实里面包含了很多东西的;我个人是这么认为的;
3.final:最终的,表示不能再修改
可以修饰的范围:类、方法、属性、局部变量
final类:代表当前类不能被继承(不能当父类用)
final方法:代表子类不能重写父类的方法
final属性:只能被初始化一次值(常量),而且必须要初始化好
final局部变量:在当前局部变量使用的范围内,不能再被修改
4.static:静态的
static定义
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法
被static修饰的成员变量和成员方法独立于该类的任何对象
也可以形成静态static代码块
static特点
static关键字修饰的属性和方法独立于当前类的所有对象,被类的所有实例对象共享
只要这个类被加载,Java虚拟机就能根据类名在运行时区内找到他们
静态变量和静态方法
通过static修饰的变量为静态变量
通过static修饰的方法为静态方法
静态变量和方法在加载当前类的时候就直接加载到内存中,不用等到创建对象
无论当前类创建多少个对象,静态变量和静态方法在内存中只有一份
5、静态块与代码块:
静态块是用于执行某部分逻辑的特定静态区域
代码块是用于执行某部分逻辑的特定代码区域
静态块在加载当前类的时候自动执行,代码块在常见当前类对象时候自动执行
静态块在加载静态属性之后,加载静态方法之前执行
代码块在加载普通属性之后,加载普通方法之前执行
代码块是用于执行某部分逻辑的特定代码区域
静态块在加载当前类的时候自动执行,代码块在常见当前类对象时候自动执行
静态块在加载静态属性之后,加载静态方法之前执行
代码块在加载普通属性之后,加载普通方法之前执行
package com.huaxin.test5;
public class Student {
// 静态块:加载类的时候自动执行
static {
System.out.println(1);
}//静态方法:调用时执行
public static void play() {
System.out.println(2);
}
// 代码块:创建对象的时候自动执行
{
System.out.println(3);
}
public Student() {
System.out.println(4);
}
public void study() {
System.out.println(5);
}
}
package com.huaxin.test5;
public class Test {
public static void main(String[] args) {
Student stu1 = new Student();
Student stu2 = new Student();
stu1.study();
stu1.play();
stu2.study();
stu2.play();
}
}
运行结果:
6、break\continue\return
break:跳出当层循环
continue:结束这一次循环,进入下一次循环
return:结束当前方法
7、八大基本数据类型
java类中:引用(类)类型、基本数据类型
引用(类)类型:String \JFrame\JLabel\Math
基本数据类型:int float double char long short byte boolean
8、八大基本数据类型都会对应有一个类类型:
Integer、Float 、Double、 Character 、Long、 Short、 Byte、 Boolean
break:跳出当层循环
continue:结束这一次循环,进入下一次循环
return:结束当前方法
7、八大基本数据类型
java类中:引用(类)类型、基本数据类型
引用(类)类型:String \JFrame\JLabel\Math
基本数据类型:int float double char long short byte boolean
8、八大基本数据类型都会对应有一个类类型:
Integer、Float 、Double、 Character 、Long、 Short、 Byte、 Boolean