关于java中static详解

关于java中static详解

我们接触static的时候不是在学习面向对象的时候接触的,是在学习方法的时候就有过接触,我们之前对static的了解只是静态的修饰,本篇文章我们对static这个修饰符做一个详细的理解😀。

  • static 如果在属性上,叫做静态属性
  • static 如果在方法上,叫做静态方法

一、static静态属性

1、我们来新建一个软件包,创建一个学生类Student类。

package oop.Demo09;public class Student
{private static int age;//静态属性private double score;//非静态属性
}

2、我们在这个类里面,定义一个main方法(psvm)

package oop.Demo09;public class Student
{private static int age;//静态属性private double score;//非静态属性public static void main(String[] args) {Student student = new Student();int age1 = student.age;System.out.println(Student.age);//通过类调用,叫做类变量System.out.println(student.age);//通过对象调用}
}

3、如果我们用类Student,直接调用score,编译器会报错,因为非静态的类不可以直接调用。

4、我们如果要用很多类,去操作属性,就会用到static,我们会在后面的多线程详细说明类直接调用属性😎。

二、static静态方法

package oop.Demo09;public class Student
{private static int age;//静态属性private double score;//非静态属性public void run()//静态方法{System.out.println("run");}public static void go()//非静态方法{System.out.println("go");}public static void main(String[] args) {//如果我们想调用run,需要实例化Student student = new Student();student.run();//如果我们想调用go,可以直接类调用Student.go();//因为go在当前的类里面,也可以直接调用go();}
}

因为静态方法,是跟着这个类一起加载的,加载Student的时候,就有go方法了。

三、静态代码块

package oop.Demo09;public class Person 
{{//代码块(匿名代码块)}static{//静态代码块(静态代码块)}
}

静态代码块,用于加载一些初始化的数据,类加载的时候直接执行,永久只执行一次。

1、我们在代码块,静态代码块中都写一行代码,并且写一个构造器ALT+INS

package oop.Demo09;public class Person
{{System.out.println("匿名代码块");}static{System.out.println("静态代码块");}public Person(){}public static void main(String[] args) {Person person = new Person();}
}

2、我们定义一个main方法,来看一下这几样东西的加载顺序,我们执行一下代码输出一下结果。

静态代码块
匿名代码块
构造方法

我们可以看到,先执行了static代码块,然后执行了匿名代码块,最后执行了构造方法,我们再来new一下Person。

package oop.Demo09;public class Person
{{System.out.println("匿名代码块");}static{System.out.println("静态代码块");}public Person(){}public static void main(String[] args) {Person person = new Person();System.out.println("===========");Person person = new Person();}
}
静态代码块
匿名代码块
构造方法
===========
匿名代码块
构造方法

我们可以看到,静态代码块不执行了,执行的是匿名代码块和构造,这就是我们上面说的,静态代码块只执行一次

  • 匿名代码块:赋初始值。

四、静态导入包

1、我们再创建一个test类。

package oop.Demo09;public class Test {public static void main(String[] args) {System.out.println(Math.random());//数学工具类返回随机数的方法}
}

我们执行以下代码,第一次返回。

0.017777263064599036

我们执行以下代码,第二次返回。

0.780661495903694

2、我们不想每次都写出Math,就可以提前导入😉

package oop.Demo09;
import static java.lang.Math.random;//静态导入包
public class Test {public static void main(String[] args) {System.out.println(random());}
}

3、我们也可以导入PI。

package oop.Demo09;
import static java.lang.Math.random;//静态导入包
import static java.lang.Math.PI;//静态导入包
public class Test {public static void main(String[] args) {System.out.println(random());System.out.println(PI);}
}

4、我们Ctrl+左键 ,点击进入Math类,会发现Math类是final修饰的,常量修饰就不会有子类了,不会被继承

public final class Math
  • final以后,断子绝孙!🤣

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

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

相关文章

深入理解Redis:如何设置缓存数据的过期时间及其背后的机制

目录 Redis 给缓存数据设置过期时间 Redis是如何判断数据是否过期的呢? 过期的数据的删除策略 Redis 内存淘汰机制 Redis 给缓存数据设置过期时间 一般情况下,我们设置保存的缓存数据的时候都会设置一个过期时间。为什么呢? 因为内存是有…

算法训练营Day48(动态规划9)

说明 今天就是打家劫舍的一天,这个系列不算难,可以一口气拿下。 198.打家劫舍 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 class Solution:def rob(self, nums: List[int]) -> int:if len(nums) 0: # 如果没有房屋&a…

电流检测电路设计方案汇总

电流检测电路设计方案(一) 低端检流电路的检流电阻串联到地(图1),而高端检流电路的检流电阻是串联到高电压端(图2)。两种方法各有特点:低端检流方式在地线回路中增加了额外的线绕电…

​ElasticSearch

目录 简介 基本概念 倒排索引 FST 简介 ES是一个基于lucene构建的,分布式的,RESTful的开源全文搜索引擎。支持对各种类型的数据的索引;搜索速度快,可以提供实时的搜索服务;便于水平扩展,每秒可以处理 …

等保2.0 MySQL 5.7 配置修改

MySQL 5.7 等保2.0 配置修改 设置 connection_control 插件修改 root 用户名开启普通日志和二进制日志 设置 connection_control 插件 安装插件 # 登录数据库 mysql -u root -p# windows 下 INSTALL PLUGIN CONNECTION_CONTROL SONAME connection_control.dll INSTALL PLUGIN…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-1事件处理

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>事件处理</title> </head><body> <input id"btn" type"button" name"btn" value"提交" /> <…

深入理解ZooKeeper分布式锁

第1章&#xff1a;引言 分布式系统&#xff0c;简单来说&#xff0c;就是由多台计算机通过网络相连&#xff0c;共同完成任务的系统。想象一下&#xff0c;咱们平时上网浏览网页、看视频&#xff0c;背后其实都是一大堆服务器在协同工作。这些服务器之间需要协调一致&#xff…

【golang】slice赋值null slice不使用零值 | go slice append 头插 尾插

一、slice 传 null 1、如何禁止零值 众所周知go如果初始化都会自带零值效果 比如一个切片我们在传送过程中&#xff0c;如果被占位且不想传值为零值 我们就需要使用* 1.1、定义一个带零值的slice 定义如下&#xff1a; slice make([]float64, 5)这样会输出&#xff1a; [0,…

小游戏选型(二):第三方社交小游戏厂家对比,即构/声网/融云/云信等

前言&#xff1a; 上一篇文章我们主要介绍社交游戏化趋势&#xff0c;并分析了直播平台面临的买量贵、变现难等问题&#xff0c;探讨了小游戏作为新的运营变现玩法的优势。同时还列举了各大直播平台TOP5的小游戏。今天我们继续介绍小游戏系列内容&#xff0c;本文是该系列的第…

浪花 - 添加队伍业务开发

一、接口设计 1. 请求参数&#xff1a;封装添加队伍参数 TeamAddRequest package com.example.usercenter.model.request;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.ann…

勤学苦练“prompts“,如沐春风“CodeArts Snap“

前言 CodeArts Snap 上手一段时间了&#xff0c;对编程很有帮助。但是&#xff0c;感觉代码编写的不尽人意。 我因此也感到困惑&#xff0c;想要一份完整的 CodeArts Snap 手册看看。 就在我感觉仿佛"独自彷徨在这条悠长、悠长又寂寥的雨巷"时&#xff0c;我听了大…

【数据库】聊聊explain如何优化sql以及索引最佳实践

在实际的开发中&#xff0c;我们难免会遇到一些SQL优化的场景&#xff0c;虽然之前也看过周阳的课程&#xff0c;但是一直没有进行细心的整理&#xff0c;所以本篇会进行详细列举explain的相关使用&#xff0c;以及常见的索引最佳实践&#xff0c;并通过案例进行讲解。 数据准…

Java复习系列之阶段三:框架原理

1. Spring 1.1 核心功能 1. IOC容器 IOC&#xff0c;全称为控制反转&#xff08;Inversion of Control&#xff09;&#xff0c;是一种软件设计原则&#xff0c;用于减少计算机代码之间的耦合度。控制反转的核心思想是将传统程序中对象的创建和绑定由程序代码直接控制转移到…

clickhouse数据迁移到starrocks踩坑记录

- clickhouse数据迁移到starrocks - 新建 clickhouse外部表 方式- 经测试存在bigint转换问题 官方已于23年 9.8日修复 等待下个版本(官方10天左右发布一个版本)- https://docs.starrocks.io/en-us/latest/data_source/External_table#create-and-manage-jdbc-resources- bug: …

阿里云幻兽帕鲁服务器4核16G配置报价

自建幻兽帕鲁服务器租用价格表&#xff0c;2024阿里云推出专属幻兽帕鲁Palworld游戏优惠服务器&#xff0c;配置分为4核16G和4核32G服务器&#xff0c;4核16G配置32.25元/1个月、10M带宽66.30元/1个月、4核32G配置113.24元/1个月&#xff0c;4核32G配置3个月339.72元。ECS云服务…

【fabric.js】toDataURL 性能问题、优化

必要解释&#xff1a;最好看完。。省流版的话&#xff0c;toDataURL 的 multiplier参数不要设置超过500&#xff1b; 情景&#xff1a;在做某些功能的时候涉及到图形的预览&#xff0c;预览的时候是导出为40*40 像素的图片&#xff0c;当碰到某些图形非常小的时候&#xff0c;…

JavaScript与Object C的区别

1.JavaScript 拥有动态类型。JavaScript的变量类型可以随意切换 若你给他赋值为数字&#xff0c;再次给它一个字符串&#xff0c;它以最后一次的类型为准是字符类型。而Object C要严格的多&#xff0c;这样它会报错的 length 6 length ddd var x 5 6;var y x * 10; // do…

C++(搜索二叉树)

目录 前言&#xff1a; 1.二叉搜索树 1.1二叉搜索树的定义 1.2二叉搜索树的特点 2.二叉搜索树的实现 2.1框架 2.2查找 2.3插入 2.4删除 1.右子树为空 2.左子树为空 3.左右都不为空 3.递归版本 3.1前序遍历 3.2中序遍历 3.3后续遍历 3.4查找&#xff08;递…

【日常学习笔记】gflags

https://mp.weixin.qq.com/s/FFdAUuQavhD5jCCY9aHBRg gflags定义的是全局变量&#xff0c;在main函数后&#xff0c;添加::gflags::ParseCommandLineFlags函数&#xff0c;就能解析命令行&#xff0c;在命令行传递定义的参数。 在程序中使用DEFINE_XXX函数定义的变量时&#x…

Ubuntu 22.04 apt 安装 ros1 ros Noetic Ninjemys

众所周知 ros2还有很多功能没有移植&#xff0c;而ros1官方不再支持 ubuntu 20.04 之后的版本。另一方面Ubuntu 22.04 更新了很多对新硬件的驱动&#xff0c;有更好的兼容性和体验&#xff0c;这就变的很纠结。 如果想在 22.04 使用最新版本的 ros noetic 只有自己编译一个办法…