Java学习(final、static关键词)
final关键词
概念:final的意思为最终,不可变。final是个修饰符,它可以用来修饰类,类的成员,以及局部变量。不能修饰构造方法。
特点:
1.final修饰的类不可以被继承,但可以继承别的类。
class Yy {}
final class Fu extends Yy{} //可以继承Yy类
class Zi extends Fu{} //不能继承Fu类
2. final修饰的方法不可以被子类重写,但父类中没有被final修饰方法,子类重写后可以加final。
class Fu {
// final修饰的方法,不可以被覆盖,但可以继承使用
public final void method1(){}
public void method2(){}
}
class Zi extends Fu {
//重写method2方法
public final void method2(){}
}
3. final修饰的变量称为常量,这些变量只能赋值一次。而且终身不变。
final int i = 20;
i = 30; //赋值报错,final修饰的变量只能赋值一次
4.引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改。
final Person p = new Person();
Person p2 = new Person();
p = p2; //final修饰的变量p,所记录的地址值不能改变
p.name = "小明";//可以更改p对象中name属性值
5.修饰成员变量,需要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均需要为其赋值。)
class Demo {
//直接赋值
final int m = 100;
//final修饰的成员变量,需要在创建对象前赋值,否则报错。
final int n;
public Demo(){
//可以在创建对象时所调用的构造方法中,为变量n赋值
n = 2016;
}
}
static关键词
概念:static是静态修饰符,一般用来修饰类中的成员。不创建对象,就可以调用方法。
特点:
1.被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)
class Demo {
public static int num = 100;
}
class Test {
public static void main(String[] args) {
Demo d1 = new Demo();
Demo d2 = new Demo();
d1.num = 200;
System.out.println(d1.num); //结果为200
System.out.println(d2.num); //结果为200
}
}
2.被static修饰的成员可以并且建议通过类名直接访问。
访问静态成员的格式:
类名.静态成员变量名
类名.静态成员方法名(参数)
对象名.静态成员变量名 ------不建议使用该方式,会出现警告
对象名.静态成员方法名(参数) ------不建议使用该方式,会出现警告
class Demo {
//静态成员变量
public static int num = 100;
//静态方法
public static void method(){
System.out.println("静态方法");
}
}
class Test {
public static void main(String[] args) {
System.out.println(Demo.num);
Demo.method();
}
}
注意事项:
1. 静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。
class Demo {
//成员变量
public int num = 100;
//静态方法
public static void method(){
//this.num; 不能使用this/super。
System.out.println(this.num);
}
}
2. 同一个类中,静态成员只能访问静态成员
class Demo {
//成员变量
public int num = 100;
//静态成员变量
public static int count = 200;
//静态方法
public static void method(){
//System.out.println(num); 静态方法中,只能访问静态成员变量或静态成员方法
System.out.println(count);
}
}
3.main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中。
4.多态调用方法中,编译看=左边,父类有,编译成功,父类没有,编译失败
运行,静态方法,运行父类中的静态方法,
运行,非静态方法,运行子类的重写方法
成员变量,编译运行全是父类
定义静态常量
概念:开发中,我们想在类中定义一个静态常量,通常使用public static final修饰的变量来完成定义。此时变量名全部大写,多个单词使用下划线连接。
定义格式:public static final 数据类型 变量名 = 值;
public class School {
public static final String SCHOOL_NAME = "北京大学";
public static void method(){
System.out.println("一个静态方法");
}
}
当我们想使用类的静态成员时,不需要创建对象,直接使用类名来访问即可。
System.out.println(Company.SCHOOL_NAME);
Company.method(); // 调用一个静态方法
注意:
接口中的每个成员变量都默认使用public static final修饰。
所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。
interface Inter {
public static final int COUNT = 100;
}
访问接口的成员变量:
Inter.COUNT
Java学习(final、static关键词)的更多相关文章
- java中的static关键词
以下来自:http://www.cnblogs.com/codc-5117/archive/2011/12/04/2275298.html Static基本规则: (1)一个类 ...
- java 关键字final static native详解
java 关键字native static final详解 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义, ...
- Java学习--final与static
final是java的关键字,它所表示的是“这部分是无法修改的”. 编译期常量,它在类加载的过程就已经完成了初始化,所以当类加载完成后是不可更改的,编译期可以将它代入到任何用到它的计算式中,也就是说可 ...
- Java中 final static super this instanceof 关键字用法
一.final关键字 final可以修饰变量.方法及类: 1.当定义一个final变量时,jvm会将其分配到常量池中,其所修饰的对象只能赋值一次,对基本类型来说是其值不可变,引用类型(包括作为函数形参 ...
- java - day008 -final ,static ,访问控制符.
面向对象 封装 类: 模板 对象: 实例 引用,遥控器 构造方法 新建对象时执行 ...
- Java学习笔记——static关键字与静态的使用方法
static:可以修饰成员变量和成员方法. 当变量被static修饰后,则其可以直接被类名调用.类名.成员. static特点: 随着类的加载而加载: 优先于对象存在: 被所有的对象共享,节省空间,但 ...
- Java学习——使用Static修饰符
程序功能:通过两个类 StaticDemo.LX4_1 说明静态变量/方法与实例变量/方法的区别. package Pack1; public class Try { public static vo ...
- Java学习:static 关键字概述
static 关键字概述 一旦用了static关键字,那么这样的内容不再属于对象自己.而是属于类的,所以凡是本类的对象,都共享同一份. 如果没有static关键字,那么必须首先创建对象,然后通过对象才 ...
- Java学习之Static
Static(静态)是一种修饰符,用于修饰成员(成员变量.成员函数) 1.静态方法只能访问静态成员. 2.静态随着类的加载而加载 通过代码分析: class PersonDemo { public s ...
- JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac
记录一下: 构造器[构造函数]: 在java中如果用户编写类的时候没有提供构造函数,那么编译器会自动提供一个默认构造函数.它会把所有的实例字段设置为默认值:所有的数字变量初始化为0;所有的布尔变量设置 ...
随机推荐
- PID控制算法的C语言实现二 PID算法的离散化
上一节中,我论述了PID算法的基本形式,并对其控制过程的实现有了一个简要的说明,通过上一节的总结,基本已经可以明白PID控制的过程.这一节中先继续上一节内容补充说明一下. 1.说明一下反馈控制的原理, ...
- Codeforces 311.E Biologist
E. Biologist time limit per test 1.5 seconds memory limit per test 256 megabytes input standard inpu ...
- 详解 Cookie 和 Session 关系和区别
在技术面试中,经常被问到“说说Cookie和Session的区别”,大家都知道,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果让你更详细地说明,你能说出几点?今天个推君就和大 ...
- 「Django」rest_framework学习系列-节流控制
1.节流自定义类: import time from api import models VISIT_RECORD = {} class VisitThrottle(BaseThrottle): #设 ...
- mysql5.7 安装常见问题
mysql 5.7安装要执行以下三个命令: 1.mysql install2.mysqld --initialize3.net start mysql 第一个命令可能会出现Install/Remove ...
- 解决SQL Server 2008 64位系统无法导入Access/Excel的问题
最近更换了新服务器,操作系统Windows Server 2008 X64,数据库SQL Server 2008 X64,Office 2007(好像只有32位),在存储过程执行OpenDatasou ...
- 持久化的基于L2正则化和平均滑动模型的MNIST手写数字识别模型
持久化的基于L2正则化和平均滑动模型的MNIST手写数字识别模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献Tensorflow实战Google深度学习框架 实验平台: Tens ...
- gulp教程之gulp-autoprefixer
现在浏览器的种类很多,不同浏览器的内核不同,同一浏览器也有很多不同的版本,很多css属性为了兼容浏览器需要加上特定的前缀,比如chrome的前缀是-webkit-,firefox前缀是-moz-等. ...
- 将new Date() 格式化为 ’2018-10-11‘ 的字符串格式
function dateToString( date , format ){ if(!date) return ""; if (!Common.type.isDate(date) ...
- 本地文件夹如何断开svn连接
最近遇到一个问题,svn的项目down失败,一不小心点了删除准备重新上传,发现本地的文件已有svn源信息,提交更新均报再找不到此文件路径. 于是想着删除此文件夹的svn信息,经过一番百度,以下方法测试 ...