一.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等关键字和代码块的更多相关文章

  1. final、static、代码块、静态代码块、内部类、代码执行顺序

    final final域使得确保初始化安全性(initialization safety)成为可能,初始化安全性让不可变形对象不需要同步就能自由地被访问和共享 作用在类上               ...

  2. Java 基础 面向对象之关键字内部类代码块修饰符

    final final概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后 ...

  3. 零基础学习java------day8------javabean编写规范,继承,static关键字,代码块,单例设计模式

    0. 今日内容提要 1. javabean书写规范 javabean:一个普通的类,用来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据. 比如:Teacher,Student,Mobile. ...

  4. JavaSE_关键字 接口 代码块 枚举

    1 Java中的关键字 1.1 static关键字 static特点 : 静态成员被所在类的所有对象共享 随着类的加载而加载 , 优先于对象存在 可以通过对象调用 , 也可以通过类名调用 , 建议使用 ...

  5. java static关键字和代码块

    static关键字 代码块 方法重写 1. 方法重写的特点: 2. 注意事项: static关键字 为什么需要学习static关键字? 针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑 ...

  6. 03_java基础(八)之static关键字与代码块

    20\21.static关键字 /** * static关键字 * 1.用static修饰后的方法,称为静态方法. * 2.静态的方法特点,可以使用 类名.方法名称 调用方法 * 3.静态方法只能调用 ...

  7. static关键字和代码块

    static关键字 static修饰的变量称为静态变量/共享变量/类变量 用于修饰类的成员,如成员变量.成员方法以及代码块等,内static修饰的成员具备一些特殊性 1.静态变量 在java类中使用s ...

  8. Java第11次作业:什么是继承?继承的好处?什么是覆写?super()?构造代码块?子父类初始化顺序? 抽象类能用final声明吗?final关键字声明类 方法 变量以及全局常量?抽象类的构造方法?

    什么是继承? 继承是以父类为基础,子类可以增加新的数据或新的功能.子类不能选择性地继承父类.这种技术使得复用以前的代码非常容易. JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一 ...

  9. 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类

    不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中st ...

随机推荐

  1. asp.net core 系列 6 MVC框架路由(下)

    一.URL 生成 接着上篇讲MVC的路由,MVC 应用程序可以使用路由的 URL 生成功能,生成指向操作的 URL 链接. 生成 URL 可消除硬编码 URL,使代码更稳定.更易维护. 此部分重点介绍 ...

  2. 华为oj之质数因子

    题目: 质数因子 热度指数:5143 时间限制:1秒 空间限制:32768K 本题知识点: 排序 题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 ...

  3. JAVA集合类兄妹List和Set

    List 接口及其实现类 有序集合,集合中每个元素都有其对应的顺序索引,类似数组,索引也是从 0 开始,可以根据元素的索引,来访问元素. List 集合允许添加相同的元素,因为它是通过下标来取值的,不 ...

  4. Linux内核使用浮点运算问题

    上一篇博文中 电池温度检测原理和示例代码 ,由于驱动要使用对数函数而从网上参看一个实现 double ln(double a) { ; int k,nk; double x,xx,y; x = (a- ...

  5. 痞子衡嵌入式:语音处理工具Jays-PySPEECH诞生记(1)- 环境搭建(Python2.7.14 + PyAudio0.2.11 + Matplotlib2.2.3 + SpeechRecognition3.8.1 + pyttsx3 2.7)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是语音处理工具Jays-PySPEECH诞生之环境搭建. 在写Jays-PySPEECH时需要先搭好开发环境,下表列出了开发过程中会用到的 ...

  6. python基础3--函数

    1.函数定义 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 ...

  7. 语音识别(LSTM+CTC)

    完整版请微信关注“大数据技术宅” 序言:语音识别作为人工智能领域重要研究方向,近几年发展迅猛,其中RNN的贡献尤为突出.RNN设计的目的就是让神经网络可以处理序列化的数据.本文笔者将陪同小伙伴们一块儿 ...

  8. 用TensorFlow教你手写字识别

    博主原文链接:用TensorFlow教你做手写字识别(准确率94.09%) 如需转载,请备注出处及链接,谢谢. 2012 年,Alex Krizhevsky, Geoff Hinton, and Il ...

  9. [Luogu4705] 玩游戏

    Description 给定两个长度分别为 \(n\) 和 \(m\) 的序列 \(a\) 和 \(b\).要从这两个序列中分别随机一个数,设为 \(a_x,b_y\),定义该次游戏的 \(k\) 次 ...

  10. php 爬虫框架

    发现两款不错的爬虫框架,极力推荐下: phpspider 一款优秀的PHP开发蜘蛛爬虫 官方下载地址:https://github.com/owner888/phpspider 官方开发手册:http ...