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多 ...
随机推荐
- Asp.net MVC的actionlink到Areas里action
<li>@Html.ActionLink("Home", "Index", "Home", new { area = " ...
- js事件源window.event.srcElement兼容性写法
<html> <body> <p>一个好处就是 我想让body(或其他元素内)的某些对象响应事件 就不用挨个儿去写 只要在外层上写一个 然后检查event.srcE ...
- python有序查找算法:二分法
二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2... 例如需要查找有序数组arr里面的某个关键字key的位置,那么首先确认arr的中位数或者中点center,下 ...
- 2 TKinter绑定事件
通过command属性给button绑定事件 目的:点击一下按扭,在窗口中出现一行字 第一种方法(command): #!/usr/bin/env python # _*_ coding:utf-8 ...
- SQL中 EXCEPT、INTERSECT用法
EXCEPT 返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值). INTERSECT 返回 两个结果集的交集(即两个查询都返回的所有非重复值). UNION返回两个结果集的并集. 语 ...
- JDBC - Oracle PreparedStatement (GeneratedKey kind) ArrayIndexOutOfBoundsException
问题: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12at oracle.jdbc. ...
- RMAN备份与恢复之不完全恢复
要点:对于RMAN的不完全恢复,有如下步骤: 1)加载数据到mount状态(建议恢复前先做备份) 2)为高并发分配多个通道 3)还原所有(所需)的数据文件 4)使用until time,until s ...
- 简述oracle视图
1.视图的概述 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表.视图来源于表,所有对视图数 ...
- 【python】sys.argv[]的用法
在学python的过程中,一直弄不明白sys.argv[]的意思,虽知道是表示命令行参数,但还是有些稀里糊涂的感觉. 今天又好好学习了一把,总算是大彻大悟了. Sys.argv[]是用来获取命令行参数 ...
- php 获取中文的拼音
注意事项: 无法识别的中文 亳:bo,如果有此字,结果为空,调用此类之前需要手动加判断 蚌:bang,beng,多音字 莞:guan 圳:zhen 儋:dan 漯:luo 濮:pu 泸:lu 衢:qu ...