Java SE 第二十三讲----static关键字and final关键字
1.static关键字 【在二十二讲视频中30分钟开始讲授】
2.static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。如果一个成员变量是static的,那么我们可以通过类名.成员变量的方式来使用它(java推荐使用这种方式)。
package com.cl.abstracttest; public class StaticTest { public static void main(String[] args){
MyStatic mystatic = new MyStatic();
MyStatic mystatic2 = new MyStatic();
mystatic.a = 10;
System.out.println(mystatic2.a);
}
} class MyStatic
{
int a;
}
结果为:0
将int a 改为 static int a 结果就变成了10
package com.cl.abstracttest; public class StaticTest { public static void main(String[] args){ MyStatic mystatic = new MyStatic();
MyStatic.a = 10;//直接用类名.成员变量方式
System.out.println(mystatic.a); }
} class MyStatic
{
static int a;
}
3.static修改方法:static修饰的方法叫做静态方法。对于静态方法来说,可以使用类名.方法名的方式来访问
package com.cl.staticandfinal; public class StaticTest2 { public static void main(String[] args) {
/*方法一
MyStatic2 s = new MyStatic2();
s.output();*/ //方法二
MyStatic2.output();//需要将方法变成static
}
} class MyStatic2{
public static void output(){
System.out.println("output");
}
}
4.静态方法只能继承,不能重写(Override)。子类不能重写父类方法,可以重载父类方法
package com.cl.staticandfinal; public class StaticTest3 {
public static void main(String[] args) {
M m = new N();
m.output();
} } class M
{
public static void output(){
System.out.println("M");
}
}
class N extends M
{
public static void output(){
System.out.println("N");
}
}
输出结果为:M
如果把
M m = new N();改为 N m = new N();结果就是N
5.final关键字:final可以修饰属性、方法、类。
6.final修饰类:当一个类被final所修饰时,表示该类是一个终态类,即不能被继承。
7.final修饰方法:当一个方法被final所修饰时,表示该方法是个终态方法,即不能被重写(Overried)
package com.cl.staticandfinal; public class FinalTest2 {
public static void main(String[] args) {
H h = new H();
h.output();
} }
class G
{
public final/*加了final修饰*/ void output(){ System.out.println("G");
}
}
class H extends G
{
public void output()//编译报错:Cannot override the final method from G
{
System.out.println("H");
}
}
8.final修饰属性:当一个属性被fina所修饰时,表示该属性不能被改写。
package com.cl.staticandfinal; public class FinalTest3 { public static void main(String[] args) {
People people = new People();
people.age = 20;//age这里会编译错误The final field People.age cannot be assigned
}
}
class People
{
final int age = 10;
}
9.当final修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化(比如说不能从10变为20),如果final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
package com.cl.staticandfinal; public class FinalTest3 { public static void main(String[] args) {
People people = new People();
people.address = new Address();//这里会编译错误The final field People.address cannot be assigned
people.address.name="shanghai";//这里不会报错 }
}
class People
{
final Address address = new Address();
} class Address{ String name = "beijing";
}
10.
Java SE 第二十三讲----static关键字and final关键字的更多相关文章
- Java SE 第二十四讲----static与final使用陷阱关键字
1.对于final类型成员变量,一般来说有两种赋值方式: a)在声明final类型的成员变量时就附上初值 package com.cl.staticandfinal; public class Fin ...
- Java SE 第二十二讲----接口interface
1.接口:interface:接口的地位等同于class,接口中的所有方法都是抽象方法.在声明接口中的方法的时候,可以使用abstract关键字也可以不使用.通常情况下,都会省略掉abstract关键 ...
- Java SE 第二篇
二. Java SE 第二篇 1. Arrays 数组 // 声明一维数组,[]内不允许有值 int[] arr; int arr[]; // 创建一维数组对象,[]内必须有值 arr = new ...
- “全栈2019”Java多线程第二十九章:可重入锁与不可重入锁详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第二十八章:公平锁与非公平锁详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第二十六章:同步方法生产者与消费者线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第二十五章:生产者与消费者线程详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第二十四章:等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第二十二章:饥饿线程(Starvation)详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
随机推荐
- unity, eulerAngle
unity中欧拉角规定如下: A rotation that rotates euler.z degrees around the z axis, euler.x degrees around the ...
- Win10 64位安装SQL2000(个人版)
默认Win10上是不允许安装SQL2000的,毕竟SQL2000已经是10多年前的老软件了,但是因为它成熟稳定,相比SQL2005,SQL2008R2,SQL2012,SQL2014,体积要小的多,所 ...
- Maven最佳实践:版本管理
什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基本用 ...
- R(二): http与R脚本通讯环境安装
结合实际的工作环境,在开始R研究的时候,首先着手收集的就是能以Web方式发布R运行结果的基础框架,无耐的是,R一直以来常使用于个人电脑的客户端程序上,大家习惯性的下载R安装包,在自己的电脑上安装 -- ...
- 【oracle】 linux 下oracle 启动监听错误
Message 1070 not found; No message file for product=network, facility=TNSTNS-12545: Message 12545 no ...
- MyBatis java and MySql local variables
<insert id="create" parameterType="models.entities.CategoryEntity"> set @c ...
- Android启动画面实现
每个Android应用程序启动之后都会出现一个Splash启动界面,显示产品LOGO.公司LOGO或者开发者信息.如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥 ...
- C#限制程序只能运行一個实例 (防多开)
//方法一:只禁止多个进程运行 using System; using System.Collections.Generic; using System.Windows.Forms; namespac ...
- RDO部署openstack(1)
1. 安装系统CentOS 6.5 2. 网络配置 Eth0 设置 # cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ON ...
- JS使用百度地图API
尚未整理: <script type="text/javascript"> var map = new BMap.Map("dituContent" ...