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 ...
随机推荐
- C++版 - 剑指offer面试题38:数字在已排序数组中出现的次数
数字在已排序数组中出现的次数 提交网址: http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&t ...
- SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1
在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...
- 贝叶斯个性化排序(BPR)算法小结
在矩阵分解在协同过滤推荐算法中的应用中,我们讨论过像funkSVD之类的矩阵分解方法如何用于推荐.今天我们讲另一种在实际产品中用的比较多的推荐算法:贝叶斯个性化排序(Bayesian Personal ...
- Jvm垃圾回收器(基础篇)
一:概述 在这篇文章中<Jvm运行时数据区>介绍了Java内存运行时区域的各个部分,其中程序计数器.虚拟机栈.本地方法栈,3个区域随着线程的生存而生存的.内存分配和回收都是确定的.随着线程 ...
- properties配置文件读取操作总结【java笔记】
声明:本文所有例子中的 properties 文件均放在 src 目录下,ecclipse 软件自动增加 一.基本概念 1.1 properties文件,存储格式 键=值. properties文件 ...
- Java提高班(一)Thread详解
一.概述 在开始学习Thread之前,我们先来了解一下 线程和进程之间的关系: 线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位. 线程不能够独立执行,必须依存在应用程序中,由应用程 ...
- 第53章 结束会话端点(End Session Endpoint) - Identity Server 4 中文文档(v1.0.0)
结束会话端点可用于触发单点注销(请参阅规范). 要使用结束会话端点,客户端应用程序会将用户的浏览器重定向到结束会话URL.用户在会话期间通过浏览器登录的所有应用程序都可以参与注销. 注意 终端会话端点 ...
- tar -P参数含义
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c) 重要的配置文件-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意: 在加上绝对路径出现的那个警告讯息“tar: Rem ...
- Java开发笔记(十五)短路逻辑运算的优势
前面提到逻辑运算只能操作布尔变量,这其实是不严谨的,因为经过Java编程实现,会发现“&”.“|”.“^”这几个逻辑符号竟然可以对数字进行运算.譬如下面的代码就直接对数字分别开展了“与”.“或 ...
- Android破解学习之路(十)—— 我们恋爱吧 三色绘恋 二次破解
前言 好久没有写破解教程了(我不会告诉你我太懒了),找到一款恋爱游戏,像我这样的宅男只能玩玩恋爱游戏感觉一下恋爱的心动了.. 这款游戏免费试玩,但是后续章节得花6元钱购买,我怎么会有钱呢,而且身在吾爱 ...