Javase易混点专项复习02_static关键字

  • 1. static关键字
    • 1.1概述
    • 1.2修饰一个成员变量
      • 例:
      • 1.2.1静态属性与非静态属性示例及内存图对比
    • 1.3修饰一个方法(静态方法)
    • 1.4.static修饰成员的访问特点总结
    • 1.5动态代码块和静态代码块
      • 1.5.1动态代码块
      • 1.5.2 静态代码块
    • 1.6带有继承的对象创建过程

1. static关键字

1.1概述

1.概述:static是一个静态关键字
2.使用:a.修饰一个成员变量:static 数据类型 变量名b.修饰一个方法:修饰符 static 返回值类型 方法名(形参){方法体return 结果}3.调用静态成员:类名直接调用(不用new对象)4.静态成员特点:a.静态成员属于类成员,不属于对象成员(非静态的成员属于对象成员)b.静态成员会随着类的加载而加载c.静态成员优先于非静态成员存在在内存中d.凡是根据静态成员所在的类创建出来的对象,都可以共享这个静态成员

1.2修饰一个成员变量

例:

public class Student {String name;int age;static String classRoom;
}
public class Test01 {public static void main(String[] args) {//先给静态成员赋个值  类名直接调用(不用new对象) Student.classRoom = "222";Student s1 = new Student();s1.name = "郭靖";s1.age = 28;//s1.classRoom = "111";System.out.println(s1.name+","+s1.age+","+Student.classRoom);System.out.println("==============");Student s2 = new Student();s2.name = "黄蓉";s2.age = 26;//s2.classRoom = "111";System.out.println(s2.name+","+s2.age+","+Student.classRoom);}
}

1.2.1静态属性与非静态属性示例及内存图对比

public class MyClass {public int a; //实例属性
}public class MyTest1 {public static void main(String[] args) {MyClass c1 = new MyClass();c1.a = 20;MyClass c2 = new MyClass();c2.a = 30;System.out.println("c1.a = " + c1.a);System.out.println("c2.a = " + c2.a);}
}

在这里插入图片描述

实例属性是每个对象各自持有的独立空间,对象单方面修改,不会影响其他对象。

public class MyClass {public int a;//实例属性public static int b;//静态属性
}public class MyTest2 {public static void main(String[] args) {//static修饰的变量随着类的加载而存在,和是否创建对象无关。MyClass.b = 10;System.out.println(MyClass.b);System.out.println("==========================");MyClass c1 = new MyClass();MyClass c2 = new MyClass();System.out.println("c1.b = " + c1.b);System.out.println("c2.b = " + c2.b);System.out.println("==========================");c1.b = 1000;System.out.println("c1.b = " + c1.b);System.out.println("c2.b = " + c2.b);}
}

在这里插入图片描述

静态属性是整个类共同持有的共享空间(只有一份),任何对象修改静态属性,都会影响其他对象对该属性的访问。

static修饰的变量随着类的加载而存在,和是否创建对象无关。

1.3修饰一个方法(静态方法)

public class MyClass {public int a;public static int b;//由static修饰的静态方法public static void m1() {//在本类中,可以通过"静态方法名"访问m2();System.out.println("m1....");}//由static修饰的静态方法public static void m2() {System.out.println("m2....");}
}public class MyTest2 {public static void main(String[] args) {//在其他类中,可以通过"类名.静态方法名"的方式访问静态方法MyClass.m1();}
}

关于静态的注意事项:

静态方法允许值访问静态成员; 想要调用的话:new对象调用
静态方法不能直接访问非静态成员;
静态方法中不允许使用this或是super关键字。

1.4.static修饰成员的访问特点总结

1.在静态方法中能直接访问非静态成员嘛?  不能想要调用的话:new对象调用  2.在非静态方法中能直接访问静态成员嘛? 能a.同类:直接调用类名调用b.不同类:类名调用3.在静态方法中能直接访问静态成员嘛?能a.同类:直接调用类名调用b.不同类:类名调用4.在非静态方法中能直接访问非静态成员嘛?能a.同类:直接调用new对象调用b.不同类:new对象调用

1.5动态代码块和静态代码块

1.5.1动态代码块

定义在类中,与属性和方法处于同一级。

语法:

class 类名 {{//动态代码块}
}

创建对象时,触发动态代码块的执行(创建一次,执行一次)。

执行时机:

动态代码块和实例属性的初始化顺序,由在类中书写的顺序决定;

代码块和属性的初始化先于构造方法执行。

作用:可为实例属性赋值,或必要的初始行为。

public class X {public X() {System.out.println("实例属性");}
}public class MyClass1 {private X x = new X();//动态代码块{System.out.println("动态代码块");}public MyClass1() {System.out.println("构造方法...");}
}public class MyTest3 {public static void main(String[] args) {MyClass1 c1 = new MyClass1();System.out.println("-------------------------");MyClass1 c2 = new MyClass1();}
}

执行结果

实例属性
动态代码块
构造方法...
-------------------------
实例属性
动态代码块
构造方法...

1.5.2 静态代码块

定义在类中,与属性和方法处于同一级。

语法:

class 类名 {static {//静态代码块}
}

类加载时,触发静态代码块的执行(仅一次)。

执行时机:

静态属性和静态代码块,二者优先级相同,执行顺序由定义顺序决定
代码块和属性的初始化先于构造方法执行。

作用:可为静态属性赋值,或必要的初始行为。

public class Y {public Y() {System.out.println("静态属性");}
}public class MyClass2 {private static Y y = new Y();//静态代码块static {System.out.println("静态代码块");}public MyClass2() {System.out.println("构造方法...");}
}public class MyTest4 {public static void main(String[] args) {MyClass2 c1 = new MyClass2();System.out.println("+++++++++++++++++++++++++++");MyClass2 c2 = new MyClass2();}
}

执行结果

静态属性
静态代码块
构造方法...
+++++++++++++++++++++++++++
构造方法...

对象创建过程

public class X {public X() {System.out.println("实例属性");}
}public class Y {public Y() {System.out.println("静态属性");}
}public class MyClass3 {private X x = new X();private static Y y = new Y();//动态代码块{System.out.println("动态代码块");}//静态代码块static {System.out.println("静态代码块");}public MyClass3() {System.out.println("构造方法...");}
}public class MyTest5 {public static void main(String[] args) {MyClass3 c1 = new MyClass3();System.out.println("==========================");MyClass3 c2 = new MyClass3();}
}

执行结果

静态属性
静态代码块
实例属性
动态代码块
构造方法...
==========================
实例属性
动态代码块
构造方法...

1.6带有继承的对象创建过程

public class X {public X() {System.out.println("父类实例属性");}
}public class Y {public Y() {System.out.println("父类静态属性");}
}public class M {public M() {System.out.println("子类实例属性");}
}public class N {public N() {System.out.println("子类静态属性");}
}public class SuperClass {private X x = new X();private static Y y = new Y();//动态代码块{System.out.println("父类动态代码块");}//静态代码块static {System.out.println("父类静态代码块");}public SuperClass() {System.out.println("父类构造方法...");}
}public class SubClass extends SuperClass {private M m = new M();private static N n = new N();//动态代码块{System.out.println("子类动态代码块");}//静态代码块static {System.out.println("子类静态代码块");}public SubClass() {System.out.println("子类构造方法...");}
}public class MyTest6 {public static void main(String[] args) {SubClass subClass = new SubClass();System.out.println("***************************");SubClass subClass1 = new SubClass();}
}

这里是引用

执行结果

父类静态属性
父类静态代码块
子类静态属性
子类静态代码块
父类实例属性
父类动态代码块
父类构造方法...
子类实例属性
子类动态代码块
子类构造方法...
***************************
父类实例属性
父类动态代码块
父类构造方法...
子类实例属性
子类动态代码块
子类构造方法...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++滑动门问题(附两种方法)

题目如下&#xff1a; 滑动窗口 - 题目 - Liusers OJ ——引用自OJ网站 方法如下&#xff1a; 1.常规思想 #include<bits/stdc.h> using namespace std; int main() {int n,k;int a[110];cin>>n>>k;for(int i0;i<n;i){cin>>a[i];}for(int i0;i…

mysql连接池druid监控配置

文章目录 前置依赖启用配置访问监控一些问题 前置 连接池有很多类型&#xff0c;比如 c3p0&#xff0c;比如 hikariCP&#xff0c;比如 druid。c3p0 一些历史项目可能用的比较多&#xff0c;hikariCP 需要高性能的项目比较多&#xff0c;druid 性能也很好&#xff0c;而且还提…

Jetson系统烧录与环境配置全流程详解(含驱动、GCC、.Net设置)

Jetson系统烧录与环境配置全流程详解&#xff08;含驱动、GCC、.Net设置&#xff09; 目录1. 准备工作与工具安装1.1 主机系统要求1.2 安装 SDK Manager 2. JetPack 系统烧录流程2.1 Jetson 进入恢复模式2.2 使用 SDK Manager 烧录 JetPack 3. Jetson 系统基础设置4. 配置 .Net…

分布式缓存:缓存的三种读写模式及分类

文章目录 缓存全景图Pre缓存读写模式概述1. Cache Aside&#xff08;旁路缓存&#xff09;工作流程优缺点 2. Read/Write Through&#xff08;读写穿透&#xff09;工作流程优缺点典型场景 3. Write Behind Caching&#xff08;异步写回&#xff09;工作流程优缺点典型场景 缓存…

Ntfs!FindFirstIndexEntry函数中ReadIndexBuffer函数的作用是新建一个Ntfs!_INDEX_LOOKUP_STACK结构

第一部分&#xff1a; 0: kd> kc # 00 Ntfs!FindFirstIndexEntry 01 Ntfs!NtfsRestartIndexEnumeration 02 Ntfs!NtfsQueryDirectory 03 Ntfs!NtfsCommonDirectoryControl 04 Ntfs!NtfsFsdDirectoryControl 05 nt!IofCallDriver 06 nt!IopSynchronousServiceTail 07 nt!Nt…

5.24 note

笛卡尔积(➕选择条件 select a.student_name as member_A, b.student_name as member_B, c.student_name as member_C from schoola as a join schoolb as b join schoolc as c where a.student_name ! b.student_name and a.student_name !…

为什么需要在循环里fetch?

假设有多个设备连接在后端,数量不定,需要按个读回状态,那么就要在循环里fetch了. 此函数非常好用,来自于国内一个作者,时间久了,忘记了来源,抱歉. export default async function fetchWithTimeout(resource, options {}) {const { timeout 1000 } options;const controll…

不同净化技术(静电 / UV / 湿式)的性能对比研究

在餐饮油烟和工业废气治理领域&#xff0c;油烟净化技术的选择至关重要。目前&#xff0c;静电、UV 光解、湿式洗涤是市场上应用较为广泛的三种净化技术。它们凭借不同的工作原理和技术特性&#xff0c;在净化效率、能耗、适用场景等方面展现出各自的优势与局限。本文将从多个维…

Ubuntu 22.04上升级npm版本

如果使用NVM安装Node.js npm会自动包含&#xff0c;但版本可能不是最新的。你可以选择升级&#xff1a; # 检查当前版本 npm --version# 升级到最新版本 npm install -g npmlatest# 或者升级到特定版本 npm install -g npm9.8.1如果使用其他方法安装Node.js 通常Node.js安装…

项目管理进阶:111页 详解华为业务变革框架及战略级项目管理【附全文阅读】

BTMS 是一套集成管理系统框架&#xff0c;涵盖变革规划、项目执行、实施及生命周期管理等多个关键环节。在规划阶段&#xff0c;通过全面收集需求、深入分析现状&#xff0c;制定出符合业务战略的年度规划&#xff0c;明确变革举措和项目清单。 解决方案开发的 PMOP 流程&#…

java基础知识回顾1(可用于Java基础速通)考前,面试前均可用!

目录 一、初识java 二、基础语法 1.字面量 2.变量 3.关键字 4.标识符 声明&#xff1a;本文章根据黑马程序员b站教学视频做的笔记&#xff0c;可对应课程听&#xff0c;课程链接如下: 02、Java入门&#xff1a;初识Java_哔哩哔哩_bilibili 一、初识java Java是美国 sun 公…

Linux下MySQL的安装与使用

1 安装前说明 1.1 Linux系统及工具的准备 安装并启动好两台虚拟机&#xff1a;CentOS 7 掌握克隆虚拟机的操作 mac地址主机名ip地址UUID 安装有 Xshell 和 Xftp 等访问 CentOS 系统的工具 CentOS6 和 CentOS7 在 MySQL 的使用中的区别 防火墙&#xff1a;6是iptables&am…

在react项目中使用andt日期组件,选择周和季度,直接获取所对应的日期区间

在react项目中使用andt日期组件&#xff0c;选择周和季度&#xff0c;直接获取所对应的日期区间 import { DatePicker, Space } from antd; import React from react; const onChange (date, dateString) > {console.log(date,dateString) }; const onChangeweek (date, …

数字信号处理大实验2 利用FFT估计信号的频率

目录 3.1 实验目的 3.2 实验内容与要求 3.3 实验原理 3.3.1 基于时域求导-频域乘法的n阶导数积分法 3.3.2 基于频域卷积的双/多谱线插值法 3.3.3 基于谱峰和滑动平均的多谱线综合插值方法 3.3.4 基于相邻显著谱线的滑动平均综合插值方法 3.3.5 基于&#xff08;2&#…

【Java】Java元注解

Target(ElementType.METHOD) Retention(value RetentionPolicy.RUNTIME) public interface OperatorLog {String source() default "WEB"; //日志操作来源 默认是web&#xff0c;还有socket的String model() default ""; //操作模块 }这个代码中的 Target…

阿里云百炼(1) : 阿里云百炼应用问答_回答图片问题_方案1_提问时上传图片文件

直接用于拍照答题不大理想, 可能适用其他用途, 更好的方案: 阿里云百炼(1) : 阿里云百炼应用问答_回答图片问题_方案2_提取题目再提问-CSDN博客 1.实现代码 package cn.nordrassil.ly.test.拍照答题;import com.alibaba.dashscope.app.Application; import com.alibaba.dashsc…

深入探索 CSS 中的伪类:从基础到实战​

在前端开发的世界里&#xff0c;CSS 作为网页样式的 “化妆师”&#xff0c;有着至关重要的作用。而 CSS 伪类则像是这位 “化妆师” 手中的神奇画笔&#xff0c;能够基于元素的状态或位置为其添加独特的样式&#xff0c;极大地丰富了网页的交互性和视觉效果。接下来&#xff0…

c++ constexpr关键字

constexpr字面意思为常量表格式&#xff0c; 用于指示编译器在编译时计算表达式的值。 1、作为常量表格式&#xff0c;必须在编译时就能确定其值。如&#xff1a;constexpr int size 9527; 2、可以修饰函数&#xff0c;要求能在编译时求值&#xff0c;所以传的参数也必须是编…

服务器硬盘分类

以下是服务器硬盘的综合性分类与技术特性分析&#xff0c;依据当前行业标准及技术演进整理&#xff1a; 一、按存储介质分类 1. ‌机械硬盘&#xff08;HDD&#xff09;‌ ‌ 核心特性‌&#xff1a;采用旋转磁盘与机械磁头结构&#xff0c;通过磁道寻址实现数据读写 …

图解深度学习 - 机器学习简史

前言 深度学习并非总是解决问题的最佳方案&#xff1a;缺乏足够数据时&#xff0c;深度学习难以施展&#xff1b;某些情况下&#xff0c;其他机器学习算法可能更为高效。 若初学者首次接触的是深度学习&#xff0c;可能会形成一种偏见&#xff0c;视所有机器学习问题为深度学…