一、final
1.final变量:
当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。
当函数参数为final类型时(例如:public foo(final int a, final int b){}),你可以读取使用该参数,但是无法改变该参数的值。
另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为final才可使用。
例如:
public class INClass{
void innerClass(final String str){
class IClass{
IClass(){
System.out.println(str);
}
}
IClass ic=new IClass();
}
public static void main(String[] args){
INClass inc=new INClass();
inc.innerClass("Hello");
}
}
2.final方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
3.final类
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
二、static
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用。
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块
1.static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
2.static方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和静态成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
3.static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
4、static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
分享到:
相关推荐
2. **接口的成员变量默认为public static final**:接口中的变量自动被声明为公共(public)、静态(static)和常量(final)。这意味着你可以直接通过接口名访问这些变量,而无需创建接口的实例。 3. **多继承特性...
在Java 8之前,接口中的方法默认都是抽象的,但在Java 8之后,接口可以包含默认方法(带有实现的方法)和静态方法。接口可以使用`extends`关键字继承其他接口,但不能继承类。接口的主要目的是定义一个合同,规定...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
### Java笔试题小结 #### 1. Java 字符串(String) **问题**: String 类的特点是什么?与 StringBuffer 的区别? **分析与解答**: `String` 类在 Java 中是不可变的,即一旦创建了一个字符串对象,其内容就不能...
这可以帮助我们了解类、方法或字段是否是public、private、static、final等。 4. 访问和修改私有成员: 反射机制能够访问和修改私有的类成员,虽然这是不推荐的做法,因为它破坏了封装性。使用`Field`对象的`...
5.7 本章小结 本章主要讲解了 Java 语言程序设计中接口和多态的概念、语法和应用。接口是一种抽象机制,提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除 C++ 中的多继承那样的复杂性。多态...
网 络为中 心 的 计 算 时 代 转 移 ,而 购 买 Java则 是 他 的 重 大 战 略 决 策的实施 部 署 。因 此 ,Java的 诞 生 必 将 对 整 个 计 算 机 产 业 发 生 深远的 影 响,对 传 统 的 计 算 模型 提 出 了 新 的 ...
#### 四、小结 通过上述步骤,我们可以创建一个简单的RPG游戏地图,并利用Java Swing库来展示它。这仅仅是RPG游戏开发中地图构建的一个起点,实际应用中还需要考虑更多的细节,如地图的动态生成、地图编辑器的开发、...
#### 四、小结 - **接口**:定义了一组方法签名,由其他类实现具体的方法体。 - **继承**:支持代码复用,子类可以继承父类的属性和方法,并可以扩展或覆盖父类的功能。 - **多态**:允许父类引用指向子类对象,...
本章小结: * 接口是Java中的一个重要机制,用于实现多继承和定义共同行为。 * 接口的语法是声明格式为[接口修饰符] interface 接口名称 [extends 父接口名]{…//方法的原型声明或静态常量}。 * 实现接口需要使用...
5. **Java类的高级特性**:包括继承的运行顺序、super关键字的使用、递归、方法覆盖和重载、多态的深入理解、static修饰符(静态成员和静态方法)、final修饰符、内部类以及内存分配的讨论,特别是String类的特殊性...
在Java中,接口中的常量默认被`public static final`修饰,这意味着它们是公共的、静态的,并且不可修改。例如,下面的代码定义了一个包含圆周率的接口: ```java public interface MathConstant { double PI = 3....
Java实现MD5加密的方法小结主要介绍了Java实现MD5加密的方法,结合具体实例形式总结分析了Java实现MD5加密的常用操作技巧与使用方法。 MD5加密是一种常用的哈希加密算法,通过对数据进行哈希处理生成一个128位的...
**10.1.5 枚举小结** - 枚举是一种引用类型,因为它隐式继承自`java.lang.Enum`类。 - 枚举是JDK 5.0之后新增的特性,使用并不频繁。 - 枚举值是常量,具有默认的`public static final`修饰符。 - 使用枚举类型的...
接口中的方法默认是public和abstract的,数据成员默认为static和final,必须初始化且不可更改。 5.2 塑型(Polymorphism) 塑型是面向对象编程的核心特性之一,指的是一个接口可以被多种不同的对象响应。在Java中,...
3.7.6 循环语句小结78 3.7.7 break语句79 3.7.8 continue语句82 3.8 JavaDebug技术84 3.9 本章练习85 第4章 4.1 一维数组90 4.1.1 为什么要使用数组90 4.1.2 什么是数组91 4.1.3 如何使用数组92 4.1.4 经验之谈-数组...