零基础学习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关键字修饰,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性

以上代码块执行顺序

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

相关文章
|
20天前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
44 5
|
20天前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
96 1
|
21天前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
97 5
|
21天前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
136 3
|
21天前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
47 1
|
21天前
|
设计模式 存储 Java
Java基础学习day07
本节讲解Java中的final关键字、单例设计模式、枚举类、抽象类与接口。涵盖常量定义、单例写法(饿汉式/懒汉式)、枚举特点及应用场景,以及抽象类与接口的使用与区别,助力掌握核心面向对象编程思想。
94 1
|
26天前
|
Java
Java基础学习day05-作业
本文为Java基础学习第五天作业,通过五个案例练习类与对象的定义、构造方法、set/get方法及成员方法的应用。涵盖女友、学生、教师、手机和电影等类的设计与测试,强化面向对象编程基础。
54 2
|
26天前
|
安全 Java 编译器
Java基础学习day06
本节学习Java继承与多态核心概念:继承通过extends实现,子类可复用父类非私有成员,支持单继承与多层继承,遵循就近原则并可用super调用父类成员;方法重写需满足权限与返回值约束,常用于重写toString等。多态基于继承,实现父类引用指向子类对象,提升扩展性但无法直接访问子类独有方法,可通过instanceof安全类型转换。
90 2
|
27天前
|
存储 Java
Java基础学习day05
本节介绍Java面向对象编程基础,涵盖类与对象的概念、构造器、this关键字、封装、Javabean及static修饰符的使用。重点讲解如何通过类设计对象、实现数据封装与方法暴露,并理解静态成员的特点与应用场景。
61 2
|
27天前
|
Java
Java基础学习day04-作业
本作业包含8个Java编程案例,涵盖数组的定义与遍历、求和、最值计算、去极值求平均、元素倍增、二维数组行和计算及查找指定元素等内容,旨在巩固Java基础语法与数组操作技能。
172 1

热门文章

最新文章