Java final和static 修饰符
一、final
final是不变的,最终的意思。可以用来修饰变量,方法,类。
1. 修饰变量
private final int a = 2;
private final int b; // final 空白,必须在构造函数中指定初始值.
// 因为static 的缘故,必须在定义时指定初始值,不能在构造函数中指定初始值.
// 因为访问static 变量根本不用调用构造函数啊,笨蛋!
private static final int c = 3;
2. 修饰方法
表示该方法不能被子类重写。使用final 方法的原因有二:一是防止任何继承类修改它的实现。二是高效,编译器在调用final方法时会转入内嵌机制,大大提高执行效率。
3. 修饰类
表明这个类是最终类,不可继承。类中的方法默认也是final 的。
二、static
static是全局或静态的意思,但是java 中没有全局变量这个概念。用于修饰成员变量,成员方法,类,代码块。
1. 修饰成员变量
使用static 修饰的成员变量,其生命周期与类的生命周期一致,也就是说,只要类被java 虚拟机加载,就可以通过类名在方法区内访问。static 变量与实例变量的区别就是jvm 只为静态变量分配一次内存,实例变量在内存中有多个拷贝,互不影响。
2. 修饰方法
使用static 修饰的方法只能访问静态变量或静态方法。因为实例变量或方法都必须与特定的实例对象关联,而类在被jvm 加载时,还没有创建类实例,这个时候访问类实例变量和实例方法肯定出错。
3. 修饰类
一般情况下,不可以使用static 修饰类,除非这个类是内部类。使用static 修饰内部类的作用:非静态内部类中定义static 变量时,必须要加上final 修饰,而静态内部类,定义static 变量时可以不加final 修饰。另外,一般我们构造某个内部类对象时,必须先
构造一个外部类对象,然后使用外部类对象构造内部类对象。而静态内部类,可以不用外部类对象,只使用外部类名即可。
构造一个非静态内部类对象
public class Main{
public void test() {
Main main = new Main();
// 使用外部类实例main 构造内部类Inner 对象
Inner inner = main.new Inner();
}
class Inner {
public Inner(){
}
}
}
构造一个静态内部类
public class Main {
public void test() {
Inner inner = new Main.Inner();
}
static class Inner {
}
}
4. 静态代码块
jvm 在加载类时,按照静态代码块的顺序执行静态代码块。
注意:static final 修饰的成员变量(包括类实例),可以理解为静态常量,一旦定义就不能更改。但是对于一些容器类型(比如 ArrayList, HashMap)使用static final 修饰后,不可改变容器本身,但可以改变容器中存放的内容。
Java final和static 修饰符的更多相关文章
- java学习笔记12(final ,static修饰符)
final: 意思是最终的,是一个修饰符,有时候一个功能类被开发好了,不想被子类重写就用final定义, 用final修饰的最终数据成员:如果一个类的数据成员用final修饰符修饰,则这个数据成员就被 ...
- Java中的Static修饰符
static(静态.修饰符):static修饰成员变量时:static修饰成员变量时,那么该成员变量的数据就是一个共享的数据. 静态成员变量的访问方式:方式一: 使用对象进行访问. 对象.属性名 方式 ...
- java——final、权限修饰符
final修饰类: final修饰成员方法: final修饰局部变量的时候: 对于基本类型来说,变量的数值不能改变 对于引用类型来说,变量的地址不能改变 final修饰成员变量的情况: 权限修饰符:
- Java Basic Notes——static修饰符
1.static 在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就 ...
- Java学习——使用Static修饰符
程序功能:通过两个类 StaticDemo.LX4_1 说明静态变量/方法与实例变量/方法的区别. package Pack1; public class Try { public static vo ...
- java final .static修饰符
static静态修饰符(使用static修饰符修饰的成员变量.常量.和成员方法成为静态变量.常量和方法,他们统称为静态成员,归整个类所有,不依赖于类的特定实例,被类的所有实例共享,只要这个类被加载,J ...
- JavaSE(三)之static、final、abstract修饰符
一.static修饰符 1.1.static变量 在类中,使用static修饰的成员变量,就是静态变量,反之为非静态变量. 静态变量和非静态变量的区别 静态变量属于类的,&quo ...
- Java static修饰符
Java static修饰符 static修饰符是静态修饰符,大家写Java第一次接触static就是主函数中的pubic static void main的声明了. 那么static有什么用?本文来 ...
- 关于Java语言中那些修饰符
一.在java中提供的一些修饰符,这些修饰符可以修饰类.变量和方法,在java中常见的修饰符有:abstract(抽象的).static(静态的).public(公共的).protected(受保护的 ...
随机推荐
- Eclipse不编译解决方案
原文链接:http://blog.csdn.net/huahuagongzi99999/article/details/7719882 转来自己用 这两天Eclipse 不编译了,无论怎么更改保 ...
- [USACO 4.2] 完美的牛栏
★★☆ 输入文件:stall4.in 输出文件:stall4.out 简单对比 时间限制:1 s 内存限制:128 MB USACO/stall4(译by Felicia Crazy) ...
- MySQL大小写问题的简单说明(关键字/函数/表名)(转)
MySQL语句中字母大小写规则随着语句元素的不同而变化,同时还要取决于MySQL服务器主机上的操作系统. SQL关键字与函数名 关键字和函数名不区分字母的大小写.如.abs.bin.now.versi ...
- Quartz.Net 使用心得(二)
工作中需要做一个简易的Cron字符串生成器,并且要获取生成的Cron后面10次的触发时间来验证. 此问题困扰了我很久时间,CSDN上有一个Java版本的,本人菜鸟,想移植到C#中,语法上怎么也不通过. ...
- ORACLE EM的删除与创建
手动删除ORACLE 10G EM 使用emca可以手动配置em! 配置em的过程中有一个环节要特别主要: 不论使用dbca还是使用emca -deconfig dbcontrol db -repos ...
- Spring MVC JSON自己定义类型转换(续)
前面提到了两种转换类型的方法(Spring MVC JSON自己定义类型转换),这里针对Json转换提供一种更简便的方法. 通过配置全局的日期转换来避免使用麻烦的注解. 首先用到了一个简单的日期工具类 ...
- HDFS学习笔记(2)hdfs_shell & JavaAPI
FileSystem shell指令 官方文档: HDFS Commands Reference appendToFile cat checksum chgrp chmod chown copyFro ...
- Wireshark网络分析实战笔记(一)抓包过滤器
抓包过滤器和显示过滤器的差别: 1.抓包过滤器配置在抓包之前,wireshark仅仅抓取抓包过滤器过滤的数据 2.显示过滤器配置在抓包后,wireshark已经抓取全部的数据包,显示过滤器让wires ...
- Andriod开发技巧——Fragment的懒载入
我们在做应用开发的时候.一个Activity里面可能会以viewpager(或其它容器)与多个Fragment来组合使用.而假设每一个fragment都须要去载入数据.或从本地载入.或从网络载入,那么 ...
- P1656 炸铁路
P1656 炸铁路 81通过 286提交 题目提供者kkksc03 标签图论搜索/枚举洛谷原创 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 因为某国被某红色政权残酷 ...