final等关键字和代码块
一.final关键字
其作用
1.final除构造方法外均可修饰
2.修饰类:被final修饰的类是无法被继承的。
3.修饰方法,可被继承,但是无法被重写
4.修饰变量使其为常量
5.修饰引用型变量,保存其内存地址,终身不变
6.修饰成员变量为常量,成员变量赋值的两种方式:1.定义是直接赋值 final int a=100;
2.采用构造方法赋值 代码如下:
package in.cast.demo4;
public class Fu {
final int a;
public Fu()
{
a=100;
}
}
对于成员变量只能直接赋值和通过构造方法赋值的解释:
我们都知道成员变量是存在于静态存储区的,它是随着对象一起进入堆内存的,直接赋值后他便出现在常量池静态区,采用构造方法赋值,是在我们实例化对象完成后立即调用构造方法,对其进行赋值
若是我们通过方法赋值,方法会进入方法栈,其中所存在的变量生存期都很短,且不属于常量
二.static关键字
static是我们不想在创建任何对象的情况下可以调用某个方法或变量的工具。那么为什么main方法前必须是static?因为程序在执行main方法时就没有创建任何对象,所以他也是一个静态的方法。在整个程序运行的过程中static所修饰的变量和方法将会一直存在,直到程序结束等待jvm自动清理。
1.类与static的关系
类与static的关系是包含。 若是一个类中的方法是以static修饰的,那么这个方法属于这个类而不是我们所实例化的对象,这样我们在测试类中就可以直接类名.方法的格式去调用这个方法而不是实例化一个对象。
2.static变量的初始化
系统自动初始化就像全局变量一样
static变量与全局变量的关系:全局变量必定是static变量,但反正不对。
3.java语法中static不允许修饰局部变量
局部变量存在于方法中,除了主方法外以及那些需要重复调用的方法外,很多方法我们都是用完就不用了,若是我们将这些方法中局部变量定义为静态变量,这些变量会一直在静态存储区,这些数据我们只用一次,但却存在于整个过程中,这是对内存的一种浪费。
4.构造器是静态方法吗?
在我看来能够使用this的方法都不能算是静态方法
this是干什么用的? this是实例化对象后才能够使用的,他所指向的对象,要么是需要我们在实例化同时输入的,要么是在实例化时直接就是空参使用的。总而言之,this与对象实例化有着密不可分的关系,而我们static方法则是为了直接调用,与我们的意愿相悖,所以构造岂不是静态方法。
5.static用于数据的共享
举个例子:一个班级的学生,他们的属性有姓名,年龄,班级。 姓名年龄各有不同,但是班级却是一样的,这时我们在student类中将 班级static化,同时赋值,或者在测试类中赋值也行,这样我们只需要输入学生的姓名,年龄即可。他们的班级全部都是我们所赋的那个值。我们后期如果要改班级的话,改一个其他全部都会变。
6.static的使用场景
当一个方法中没有引用过非静态变量时便可以将这个方法以static修饰
下面一段代码是一种特例
package in.cast.demo4;
public class Fu {
private String name;
private int age;
public static int function(int a,int b,int c) { //此处的a,b,c并不是来自于本类所以完全可以以static修饰,并且这是一个独立的方法,并没有用非静态变量
return a+b+c;
}
}
7.内存中他又是怎样的

三.代码块
1.局部代码块
package cn.itcast.demo12;
public class Demo1 {
public static void main(String[] args) {
{
int a=100;
System.out.println(a);
} ××不能在代码块外syso(a);
}
}
局部代码块是在方法体中的代码块,作用是限定了作用域。 意思是我们在代码块中所定义的变量是只属于这个代码块的,在代码块之外是不能调用的。
2.构造代码块
package cn.itcast.demo12;
public class Demo2 {
public Demo2(){
System.out.println("这是一个构造方法");
}
{
System.out.println("这是一个构造代码块");
}
{
System.out.println("哇哈哈");
}
}
package cn.itcast.demo12;
public class Test {
public static void main(String[] args) {
new Demo2();
}
}
结果:这是一个构造代码块
哇哈哈
这是一个构造方法
可以看出构造代码块可以进行一个统一的操作。 当我们在测试类中实例化对象时,我们通过参数只能使用一个构造方法,但是我们却可以使用全部的构造代码块。 这就代表着构造代码块的优先级应该是高于构造方法的,构造代码块的全部可以使用更像是一种比构造方法更为基本的初始化,所以构造代码也应该是先执行的。
3.静态代码块
静态代码块无论如何只能使用一次。 使用一次之后再次实例化他将不再出现。且静态代码块>构造代码块>局部代码块
class Demo
{
static {
System.out.println("这是一个静态构造代码块");
}
{
System.out.println("构造代码块");
}
} class Test
{
new Demo();
new Demo();
}
结果:这是一个静态代码块
构造代码块
构造代码块
四.总结
一直在写,还是没有感觉到提升,可能还是质量不高,没有思考的更加深入。没事,再写写吧,凡事还是认真点好......
final等关键字和代码块的更多相关文章
- final、static、代码块、静态代码块、内部类、代码执行顺序
final final域使得确保初始化安全性(initialization safety)成为可能,初始化安全性让不可变形对象不需要同步就能自由地被访问和共享 作用在类上 ...
- Java 基础 面向对象之关键字内部类代码块修饰符
final final概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后 ...
- 零基础学习java------day8------javabean编写规范,继承,static关键字,代码块,单例设计模式
0. 今日内容提要 1. javabean书写规范 javabean:一个普通的类,用来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据. 比如:Teacher,Student,Mobile. ...
- JavaSE_关键字 接口 代码块 枚举
1 Java中的关键字 1.1 static关键字 static特点 : 静态成员被所在类的所有对象共享 随着类的加载而加载 , 优先于对象存在 可以通过对象调用 , 也可以通过类名调用 , 建议使用 ...
- java static关键字和代码块
static关键字 代码块 方法重写 1. 方法重写的特点: 2. 注意事项: static关键字 为什么需要学习static关键字? 针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑 ...
- 03_java基础(八)之static关键字与代码块
20\21.static关键字 /** * static关键字 * 1.用static修饰后的方法,称为静态方法. * 2.静态的方法特点,可以使用 类名.方法名称 调用方法 * 3.静态方法只能调用 ...
- static关键字和代码块
static关键字 static修饰的变量称为静态变量/共享变量/类变量 用于修饰类的成员,如成员变量.成员方法以及代码块等,内static修饰的成员具备一些特殊性 1.静态变量 在java类中使用s ...
- Java第11次作业:什么是继承?继承的好处?什么是覆写?super()?构造代码块?子父类初始化顺序? 抽象类能用final声明吗?final关键字声明类 方法 变量以及全局常量?抽象类的构造方法?
什么是继承? 继承是以父类为基础,子类可以增加新的数据或新的功能.子类不能选择性地继承父类.这种技术使得复用以前的代码非常容易. JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一 ...
- 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类
不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中st ...
随机推荐
- Asp.net Core IdentityServer4 入门教程(一):概念解析
目录 1.IdentityServer4 是什么 2.什么是OpenID和OAuth 2.0协议 3.IdentityServer4 可以用来做什么 其他 1.IdentityServer4 是什么 ...
- maven-代码风格检查工具
目录 checkstyle findbugs pmd 其他 checkstyle checkstyle 用于对代码风格进行检查 checkstyle-maven插件 操作示例 mvn clean co ...
- Java开发知识之Java的枚举
Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...
- Promise杂记
更好的阅度体验 前言 API Promise特点 状态跟随 V8中的async await和Promise 实现一个Promise 参考 前言 作为一个前端开发,使用了Promise一年多了,一直以来 ...
- Python并发编程之谈谈线程中的“锁机制”(三)
大家好,并发编程 进入第三篇. 今天我们来讲讲,线程里的锁机制. 本文目录 何为Lock( 锁 )?如何使用Lock( 锁 )?为何要使用锁?可重入锁(RLock)防止死锁的加锁机制饱受争议的GIL( ...
- 实时显示数据 SignalR 及时消息提醒( 立即向其推送内容)
实时显示数据 SignalR 及时消息提醒( 立即向其推送内容) http://www.cnblogs.com/Leo_wl/p/5634910.html <!--Reference the ...
- Spring boot集成spring session实现session共享
最近使用spring boot开发一个系统,nginx做负载均衡分发请求到多个tomcat,此时访问页面会把请求分发到不同的服务器,session是存在服务器端,如果首次访问被分发到A服务器,那么se ...
- 开源IM项目-InChat登录接口设计与实现(基于Netty)
- 设计模式之一工厂方法模式(Factory Method)
工厂方法模式分为三种: 一.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: pub ...
- TS学习随笔(五)->函数
这篇文章我们来看一下TS里面的函数 函数声明 在 JavaScript 中,有两种常见的定义函数的方式——函数声明(Function Declaration)和函数表达式(Function Expre ...