零基础学习Java 07

简介: 零基础学习Java 07

static关键字

  • static(静态关键字),可以修饰成员变量和成员方法
  • static关键字的特点:1、随着类的加载而加载;2、优先于对象存在;3、被类的所有对象共享(判断是否使用静态关键字static的条件);4、可以通过类名调用(推荐使用)
  • static方法:static方法也叫作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说是没有this关键字的使用的,因为this关键字要依附于对象,在静态方法中不能访问类的非静态成员,但是,在非静态成员方法中是可以访问静态成员方法或静态变量的
  • static变量:static变量也叫作静态变量或类变量,静态变量与非静态变量的区别在于:静态变量被所有对象共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化;非静态变量是对象所拥有的,在创建对象的时候被初始化,在内存中存在多个副本,且各对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行
  • 注:
  • Java中的static关键字不会影响到变量或者方法的作用域,在Java中能够影响访问权限的只有访问权限修饰符
  • 静态成员变量虽然独立于对象,但是仍然可以通过对象进行访问(只要访问权限足够)
  • static是不允许用来修饰局部变量的
  • 可以理解为静态元素与对象没有关系,它属于类
  • 静态元素中不可以使用this、super关键字
  • 静态变量存储在方法区中的静态区

 

final关键字

  • final关键字可以用来修饰类、方法和变量
  • 修饰类:当用final修饰一个类时表明这个类不能被继承,final类中的成员变量并不是默认final修饰的,可以根据需要设为final,但final类中的所有方法却默认final修饰
  • 修饰方法:对于重写问题而言,当父类中的某个方法被final修饰时,就表明父类中的这个方法不能被子类重写,也就是禁止子类重写此方法(主要目的是防止该方法的内容被修改)
  • :重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时又被private修饰,此时不会产生重写与final的矛盾,因为子类根本就没有继承这个方法,这个方法被私有化了,既然没有继承何来的重写,final就无作用了,所以当父类中的某个方法的修饰符上同时有private和final时,在子类中依然可以出现同样声明的方法,因为这被视为在子类中重新定义了新的方法
  • 修饰变量:被final修饰的变量就变成了常量,常量不能被重新赋值,只读不可写,Java中定义常量时一般会加上static修饰,因为常量是不变的,任何对象拥有的都一样,如果一直new一样的东西就会浪费内存
    :被定义为final的成员变量必须在构造对象时就被初始化,并且以后不能再修改
  • final修饰基本数据类型时是值不能被改变,而final修饰引用类型数据时是地址值不能被改变,但是该对象的内容是可以变的
  • final修饰的实例变量必须手动赋值不能采用系统默认值
  • 父类中的final方法可被子类继承,但是不能被子类重写
  • final修饰的引用指向的对象无法被垃圾回收器回收

:当变量被final修饰后,这个变量就变成了常量,既然是常量,那么它在内存中存储的就只是数值了,与之前的变量内存就无关系了,即当变量消失时,常量不会消失,依旧是那个数值在运算,所以,若想某个数据不会因变量消失而消失,就将它修饰为常量

 

代码块

在Java中使用{ }括起来的代码被称为代码块,根据其位置和声明的不同可以分为:局部代码块、构造代码块、静态代码块、同步代码块

  • 局部代码块:其又叫普通代码块,在方法中出现,限定变量生命周期,主要用于解决当前方法中变量名重复的问题。若想要在一个方法中多次使用同一个变量名,并且互不影响,这时就可以将该变量放入不同局部代码块当中,因局部代码块中的变量生命周期只限于该代码块中
  • 构造代码块:在类中方法外出现,多个构造方法中相同的代码存放到一起,每次调用构造都执行,只要创建对象就会执行构造代码块,主要作用是对对象进行初始化
  • 静态代码块:在类中方法外出现,加了static修饰符,最先被执行,且对于一个类的多个对象只执行一次,其主要作用是对类进行初始化,随着类的加载而执行,与创不创建对象无关
  • 同步代码块:在方法中出现,使用synchronized关键字修饰,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性

以上代码块执行顺序

静态代码块-->构造代码块-->构造方法-->局部代码块

相关文章
|
2月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
97 43
Java学习十六—掌握注解:让编程更简单
|
1月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
39 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
58 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
2月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
37 2
|
2月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
43 1
|
2月前
|
存储 搜索推荐 算法
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
29 1
|
2月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
39 0
|
2月前
|
Java 大数据 开发工具
java学习——环境准备(1)
java学习——环境准备(1)
43 0