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 ...
随机推荐
- 前端笔记之JavaScript(四)关于函数、作用域、闭包那点事
一.自定义函数function 函数就是功能.方法的封装.函数能够帮我们封装一段程序代码,这一段代码会具备某一项功能,函数在执行时,封装的这一段代码都会执行一次,实现某种功能.而且,函数可以多次调用. ...
- 浅析Javascript单例模式
定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点 .就想我们在开发中有些对象只需要一个,例如window对象. 1. 实现单例模式 var Singleton = function( nam ...
- MySQL 个人学习笔记
最早之前学习了Mysql,不知道是多长时间了 O(∩_∩)O,今天突然发现之前学习过程中的这个笔记,于是,就分享给大家,希望,能帮助到有需要的朋友,有不足的地方欢迎大家多多交流 b( ̄▽ ̄)d 1. ...
- MariaDB Galera Cluster 部署 + keepalived实现高可用
MariaDB Galera Cluster 部署 MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力 ...
- Docker最全教程——从理论到实战(七)
在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...
- Docker最全教程——从理论到实战(二)
上篇内容链接: https://www.cnblogs.com/codelove/p/10030439.html Docker和ASP.NET Core Docker 正在逐渐成为容器行业的事实标准, ...
- Ansible快速上手
ansible 是通过python 语言开发的自动化运维工具,可以实现批量系统设置.批量程序部署.批量执行命令等功能 下面是基于docker使用ansible测试示例,可以让新手快速上手使用 一.新建 ...
- 支持异步写入的日志类,支持Framework2.0
因为工作需要需要在XP上运行一个C#编写的Winform插件,我就用Framework2.0,因为存在接口交互所以想保留交易过程的入参出参. 考虑到插件本身实施的因素,就没有使用Log4.NLog等成 ...
- Swing——简单的计算器
前言 这是博主学习完Swing后,使用Swing实现的一个简单计算器.做简单的计算器的目的是将最近所学的Swing给应用起来,写博文介绍的目的是记录做这个计算器的思路.下面将分为界面和事件两部分介绍. ...
- Spring中用了哪些设计模式
1 简单工厂模式 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类. ...