首先是访问控制的关键字,分
public、protected、default、private四种,权限如下:
| (权限) public protected default private |
| 同一类中 ok ok ok ok |
| 同一包中 ok ok ok |
| 子类中 ok ok |
| 不同包中 ok |
public的权限是最大的,private权限最小
下面是一些常用的关键字:
一、final
(一)final修饰的属性
被final修饰的属性表示此变量为常量,
一旦赋值则不能被改变,
如下面类中的CONSTANT:
class Person{
public final int CONSTANT;
public Person()
{
CONSTANT = 8;
// CONSTANT = 9;//编译器报错,final类型CONSTANT已被初始化,不能被修改
}
}
当然也可以在这个常量声明的时候就给它赋值,这样在其他地方就不能再修改了。
虽然final修饰的变量不能被修改,但依然可以被继承并使用,只不过同样地不能在子类中修改此常量。
下面用一个子类继承上面的Person类:
class Student extends Person{
public Student()
{
// CONSTANT++; //错误,不能修改常量
System.out.println(CONSTANT); //正确,可以在子类中使用此常量
}
}
另外因为常量的特殊性,所以在创建常量时一般用全大写,如上面的CONSTANT,以区分和常量和一般变量。
(二)final修饰的方法
被加final关键字的方法或属性是不能被继承的类修改的。将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。
如有一个Person类:
class Person{
public final void speak()
{
System.out.println("我是父类");
}
}
这个Person类有一个final修饰的方法speak(),然后我们让另一个类Student继承它:
class Student extends Person{
// public void speak()
// {
// System.out.println("我是学生");
// }
// 编译器报错,不能重写此方法。
public static void main(String[] args) {
new Student().speak();
}
}
可以发现,如果在Student里面重写speak()方法编译器会报错,这是因为在Person里面已经将speak()定义为final类型了,而另一方面,虽然不能在Student里面重写此方法,但从主函数里可以看到依然可以在Student里面调用speak()方法,这说明speak()方法依旧能被继承,只不过不可被重写。
二、static
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。
(一)被static修饰的成员变量
如下,当一个变量被声明为static时,在其他类中要引用此变量时,可以不用创建一个特定的对象,而是可以直接通过类名来调用:
class Person{
public static String s = "ddd";
}
class Student{
public Student()
{
System.out.println(new Person().s);
}
}
当然也可以通过创建对象来调用此静态变量,但是因为被static修饰的成员变量独立于该类的任何对象这种特殊性,如果某一个对象修改了这个静态变量,则会永久修改这个变量值直到另一个对象再次修改,代码如下:
class Person{
private static String name;
public Person(String name)
{
this.name = name;
}
public void speak()
{
System.out.println(name+" is speaking");
}
public static void main(String[] args) {
Person p1 = new Person("小名");
Person p2 = new Person("小芳");
p1.speak();
p2.speak();
}
}
如果name这个属性不是static的,结果显而易见应该是小名 is speaking和小芳 is speaking,但是当name有static修饰的时候,运行结果反而是:
小芳 is speaking
小芳 is speaking
这是因为当创建第一个对象时,我们赋给了name一个值“小名”,然后再创建另一个对象赋值给name另一个值“小芳”,应该注意到这两个name实际上是一个name,修改之后这个类的所有对象共享的name就是“小芳”了,所以后面无论用哪个对象去调用name,结果都是“小芳”。
(二)被static修饰的方法
在static修饰的方法中只能引用本类的静态成员变量
class Person{
private static String name;
private String sex;
public static void speak()
{
System.out.println(name);
// System.out.println(sex); //错误,应在name前声明static
}
}
当然静态成员变量可以在非静态方法内使用。而且在静态方法中,可以引用其他类的非静态常量。另外需要注意的是在静态方法中就不能使用this了,因为此方法无需创建对象。
(三)静态域
静态域也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
值得注意的是静态方法块执行先于构造方法,如下:
public class Person{
static{
System.out.println("前静态代码块");
}
public Person()
{
System.out.println("构造方法");
}
static{
System.out.println("后静态代码块");
}
public static void main(String[] args)
{
new Person();
}
}
运行结果为:
前静态代码块
后静态代码块
构造方法
在接口中声明成员变量时往往会同时用到final和static,这是因为接口应要标准化,内容不能被随意更改。
分享到:
相关推荐
java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...
本篇文章将深入探讨如何使用iText库在Java中实现PDF关键字定位。iText是一个强大的PDF处理库,它提供了丰富的API来创建、编辑和读取PDF文档。 首先,我们需要在项目中引入iText库。你提到的`itextpdf-5.5.6.jar`是...
在Java编程语言中,`super`关键字是一个非常重要的概念,它允许我们引用当前对象的父类中的成员。这个关键字在处理继承关系时尤其有用,帮助我们实现多态性并访问被隐藏或重写的成员。本篇文章将深入探讨`super`...
### Java关键字、标识符、注释详解 #### 关键字(Keywords) 在Java语言中,关键字是具有特殊意义的保留字,它们不能用作变量名、方法名或类名等标识符。Java的关键字用于定义程序结构的重要组成部分,如控制语句、...
Java拥有51个关键字,这些关键字在编程中扮演着核心角色,用于声明类型、控制流程、异常处理等。下面我们将逐一介绍这些关键字: 1. **abstract**:用于定义抽象类和抽象方法,表示该类不能被实例化,或方法没有...
在执行分析时,程序首先会读取指定的Java源代码文件,然后逐行扫描,检查每行中是否存在Java关键字。为了实现这一点,程序可能使用正则表达式或者预定义的关键词列表来进行匹配。接着,对于每个匹配到的关键字,程序...
在Java编程语言中,实现根据关键字查找文件夹内包含该关键字的文件是一项常见的任务,尤其在数据处理、日志分析或者文件管理系统中。这个功能可以帮助用户快速定位到含有特定信息的文件,提高工作效率。以下是一个...
在编程语言的学习中,了解和掌握关键字是至关重要的一步,特别是在Java这种强类型的语言中。本文将深入探讨Java中的关键字,这些关键字是Java语法结构的基础,它们被Java编译器特殊处理,有着特定的含义和功能。 ...
通过args传参,读取文件,统计java代码中的关键字个数
Java关键字大全是Java编程语言中最基本和最重要的组成部分。这些关键字是Java语言的基础构建块,用于定义类、方法、变量、控制流、异常处理等。了解和掌握Java关键字是每一个Java开发者必备的技能。 下面是Java...
根据给定的部分内容,我们可以列出以下Java关键字: 1. **abstract** 2. **continue** 3. **for** 4. **new** 5. **switch** 6. **assert** 7. **default** 8. **if** 9. **package** 10. **synchronized** 11. **...
首先,让我们来谈谈“Linux中Java变量与java关键字”。在Java编程中,变量是存储数据的容器,它们可以是基本类型(如int、float、boolean等)或引用类型(如对象)。在Linux环境下,Java程序的运行与Windows或Mac...
以下是对给定文件中提到的Java关键字进行的详细解释与总结: #### 1. `abstract` - **用途**:`abstract`关键字用于声明抽象类或抽象方法。抽象类不能被实例化,但可以被其他类继承;抽象方法没有具体实现,必须由...
揽括了java中常见的关键字及用法,包括Abstract、instanceof、private、protected等等。
Java 中 super 关键字的三种用法 Java 中的 super 关键字有三种用法:在子类的构造函数中调用父类的构造方法、在子类中访问父类的成员变量或方法、在子类的构造函数中直接传递参数给父类的构造方法。 首先,在子类...
在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被用来声明一个变量、方法或类为不可变的。在这个学习demo中,我们将深入理解`final`关键字的各种用法及其背后的原理。 首先,`final`关键字用于变量...
Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源时的同步机制。在Java中,当多个线程试图同时访问和修改同一块代码或数据时,可能会导致数据不一致的问题。为了解决这个问题,...
Java 关键字是编程语言中预定义的具有特殊含义的标识符,它们是构建和管理程序结构的关键元素。本文将详细解析 Java 中的访问控制关键字,以及类、方法和变量修饰符。 首先,我们来看看访问控制关键字: 1. **...
Java 中的 static 关键字 Java 中的 static 关键字是用于声明类的成员变量和成员方法的,它可以使得变量和方法属于类本身,而不属于某个对象。静态变量也称为类变量,静态方法也称为类方法。静态变量和静态方法可以...
Java 语言中有四个重要的概念:关键字、标识符、注释和转义字符。这些概念是 Java 语言的基础,理解这些概念对于编写 Java 代码非常重要。 一、Java 关键字 Java 关键字是 Java 语言中具有特殊含义的词,例如 ...