Java学习——static,final关键字,游离块,接口

2023-10-20 05:10

本文主要是介绍Java学习——static,final关键字,游离块,接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一,static关键字

1,1——static(静态的),用来修饰属性跟方法的一个修饰符

        使用static修饰的属性以及方法,在进行调用的时候,是直接通过类名进行调用的,不需要去创建对象来调用。

在Java中一般使用 static final 一起定义一个静态常量,常量名字一般大写,如果涉及多个单词,则用_隔开,比如在Math类中的PI常量

  public static final double PI = 3.14159265358979323846;

在进行调用的时候就直接通过Math.PI进行调用了,还有很多例子,比如Arrays.toString()方法,用来遍历输出数组中的元素。

如果某个类或者某个变量被static修饰了,那么这个类或者这个变量的控制权就不在对象手上了,全部的控制权就在类的手上了。

比如现在有一个类,叫People类,暂且不考虑修饰符是私有还是公有,name属性被static修饰了,age属性没有被修饰,现在进测试类进行测试

public class People {int age;static String name;@Overridepublic String toString() {return "People{" +"age=" + age +", name='" + name + '\'' +'}';}}

测试类:创建两个对象,分别通过对象给其age属性赋值为11 和 12;name属性则通过来进行赋值

    public static void main(String[] args) {People people=new People();People people1=new People();people.age=11;people1.age=12;People.name="张三";System.out.println(people.toString());System.out.println(people1.toString());}测试结果:People{age=11, name='张三'}
People{age=12, name='张三'}

结果是两个对象的name属性都被赋值了,这个值是通过类来调用static静态属性来赋值的

我们就可以得出结论,使用static修饰的属性,就可以理解为是一个全局变量了,只能通过类来给它赋值,但是,通过对象名来给它赋值也是不会报错的,但是一般不这么做。

同样,用static修饰的方法只能被继承,但是不能被重写

eg:

定义一个类People,用static修饰一个方法,再定义一个Man类来继承它

结果是不能重写这个方法的。

二,游离块

        游离块也叫做初始化块,其本质就是一个方法体的执行

    {System.out.println("我是第一个游离块");}{System.out.println("我是第二个游离块");}

游离块应用的场景就是,当有重复的初始化代码的时候,可以将其放在一个游离块中,在每次调用类创建对象的时候,他就会自己执行一次。

        注意的是:

        静态游离块,只会执行一次。静态游离块指的就是static修饰的游离块,它只会在第一次调用类创建对象的时候执行一次,以后再调用类创建对象的时候就不会执行了

        普通游离块,是创建一次对象就执行一次

执行顺序问题:

当类中有构造方法,游离块,静态游离块,普通方法的时候

eg:有一个demo类:里面同时包含这些方法

 static {System.out.println("我是一个静态游离块");}public Demo_youlikuai() {System.out.println("我是构造函数");}public void print() {System.out.println("我是一个普通的方法");}{System.out.println("我是第一个游离块");}{System.out.println("我是第二个游离块");}

测试结果:

 public static void main(String[] args) {Demo_youlikuai D1 = new Demo_youlikuai();D1.print();}结果:我是一个静态游离块
我是第一个游离块
我是第二个游离块
我是构造函数
我是一个普通的方法

顺序:静态>游离块>构造方法>普通方法

三,final关键字

3.1——final(最终的)

字面上很好理解,如果说被final修饰的,那么它就是最终的,也就可以理解为不能“”了

final可以用来修饰:属性,类,方法

当final修饰属性的时候,这个属性不能被赋值;

当final修饰类的时候,这个类不能被继承

当final修饰方法的时候,这个方法不能被重写

但是子类依旧是可以继承父类被final修饰的属性或者方法的。

eg:

Fu类:定义一个属性age,给它赋值为45,定义一个print方法,二者都是用final修饰的。

/*** 父类*/
public class Fu {final int age = 45;final public void print() {System.out.println("我是父类");}
}

Son类:试图重写父类的方法。

测试类:

public class Test {public static void main(String[] args) {Son son=new Son();System.out.println(son.age);son.print();}
}

测试结果是:

45
我是父类

        说明虽然用了final修饰,子类是可以调用父类的final修饰的成员变量以及方法的。仅仅是不能重写方法可以重新给变量赋值

修改父类为final修饰

测试结果均是不可以的

四、接口

4.1——接口的定义

        接口:我个人理解就是插口,通俗点来理解可以理解为笔记本上的各个插口,可以连USB,连充电口的,连网线口的........

        直接解释:接口是功能方法的集合,就是说只声明方法,而具体实现交给实现类去实现。还是拿笔记本来举例子,笔记本上的所有插口是不能自己去实现具体功能的,都需要插线连接才能去使用相关功能,接口本身什么都不实现,具体交给插在接口上的线,比如电源线,它连接笔记本跟插座,它才是去实现这个功能的,电源接口本身什么都实现不了。

4.2——如何使用接口?

1,使用interface关键字去定义一个接口。

public interface A{}

2,定义一个实现类去实现接口,关键字是implements

public B implements A{}

这样就定义了一个实现类来实现了一个接口

4.3——使用接口的注意事项

1.接口是不能创建对象的

2.接口里面能放哪些方法?

答:抽象方法,普通方法(只有声明),从JDK8开始,接口中可以定义default,static修饰的普通方法(要实现)具体如下:

/*** 新建了一个接口DAO*/
public interface DAO {public static final int aaa = 100;//静态常量public void run();//新建一个方法,没有具体的实现public abstract  void eat();//新建一个抽象方法public default void m1(){System.out.println("这是一个用default修饰的方法");}public static void m2(){System.out.println("这是一个用static修饰的方法");}}

3.接口中可以定义变量吗?

答:可以,但是所有变量默认都是final static修饰的静态常量

4.接口中可以定义private修饰的方法吗?

答:JDK8不可以,接口中默认的方法都是public abstract修饰的,但是从JDK9开始可以在接口中定义私有的方法了。

5.如何访问接口中的静态常量?

答:使用接口名调用方法名跟常量名

这篇关于Java学习——static,final关键字,游离块,接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/244882

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06