Java开发从入门到精通(九):Java的面向对象OOP:成员变量、成员方法、类变量、类方法、代码块、单例设计模式
Java大数据开发和安全开发
- (一)Java的变量和方法
- 1.1 成员变量
- 1.2 成员方法
- 1.3 static关键字
- 1.3.1 static修饰成员变量
- 1.3.1 static修饰成员变量的应用场景
- 1.3.1 static修饰成员方法
- 1.3.1 static修饰成员方法的应用场景
- 1.3.1 static的注意事项
- 1.3.1 static的应用知识:代码块
- 静态代码块
- 实例代码块
- 1.3.1 static的应用知识:单例设计模式
- 懒汉式单例设计模式
- 1.4 final关键字
(一)Java的变量和方法
1.1 成员变量
待补充
1.2 成员方法
待补充
1.3 static关键字
static关键字的概念:
静态的意思,可以修饰成员变量、成员方法。
1.3.1 static修饰成员变量
成员变量按照有无static修饰,分为两种:
-
类变量
-
实例变量(对象的变量)

-
类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享
-
实例变量(对象的变量): 无static修饰,属于每个对象的
public class Student {// 类变量static String name;// 实例变量(对象的变量)int age;}
public class Test {public static void main(String[] args) {// 目标:掌握有无static修饰成员变量的用法,特点。// 1、类变量的用法。// 类名.类变量(推荐)Student.name ="袁华";// 对象.类变量(不推荐)Student s1 = new Student();s1.name ="马冬梅"; //会被类的全部对象共享Student s2 = new Student();s2.name="秋雅"; //会被类的全部对象共享System.out.println(s1.name);// 秋雅System.out.println(Student.name);// 秋雅//2、实例变量的用法:属于每个对象的变量// 对象.实例变量s1.age = 23;s2.age = 18;System.out.println(s1.age);//23}
}
成员变量的执行原理

1.3.1 static修饰成员变量的应用场景
类变量的应用场景
- 在开发中,如果某个数据只需要一份,且希望能够被共享(访问、修改),则该数据可以定义成类变量来记住
案例导学:
- 系统启动后,要求用户类可以记住自己创建了多少个用户对象了
public class User {// 类变量public static int number;public User(){// User.number++;// 注意:在同一个类中,访问自己类的类变量,才可以省略类名不写。number++;}
}
public class Test2 {public static void main(String[] args) {// 目标:通过案例理解类变量的应用场景、User ul = new User();User u2 = new User();User u3 = new User();User u4 = new User();System.out.println(User.number);}
}
1.3.1 static修饰成员方法
成员方法的分类
- 类方法 :有static修饰的成员方法,属于类。(也叫静态方法)

- 实例方法 :无static修饰的成员方法,属于对象

public class Student {double score;// 类方法public static void printHelloWorld() {System.out.println("Hello World");System.out.println("Hello World");}//实例方法(对象的方法)public void printPass(){System.out.println("成绩:" +(score >=60 ?"及格":"不及格"));}
}
public class Test {public static void main(String[] args) {// 目标:掌握有无static修饰方法的用法。// 1、类方法的用法// 类名.类方法(推荐)Student.printHelloWorld();// 对象.类方法(不推荐)Student s= new Student();s.printHelloWorld();// 2、实例方法的用法// 对象.实例方法s.printPass();// Student.printPass();// 报错 不能使用类名访问实例方法}
}
成员方法的执行原理

搞懂main方法
main方法使用static修饰也就说明main方法是类方法,Test.class在运行时会直接执行Test.main方法,所以main可以直接运行不需要别人调用,String[] args 代表main方法可以传参的,怎么传呢?看下面

这里我们用txt写了一段循环的代码 使用java编译来运行

java在编译执行的时候可以按照参数的类型直接传参,这是就是main方法的传参

1.3.1 static修饰成员方法的应用场景
- 类方法最常见的应用场景是做工具类
工具类是什么?
- 工具类中的方法都是一些类方法,每个方法都是用来完成一个功能的,工具类是给开发人员共同使用的。
使用类方法来设计工具类有啥好处?
- 提高了代码复用;调用方便,提高了开发效率

类方法应用场景案例
- 某系统登录页面需要四位数的验证码 注册页面需要六位数的验证码

登录页面写一次生成验证码的代码 注册页面再写一次 代码重复率很高

所以使用工具类来简化代码
import java.util.Random;public class GongJuLei {public static String CreateCode(int n){String code ="";String data = "abcdefghijklmnopqrstuVwXyZABCDEFGHIJKLMNOPORSTUVWXYZ0123456789";Random r =new Random();// 2、开始定义一个循环产生每位随机字符for(int i=0;i<n;i++){// 3、随机一个字符范围内的索引。int index = r.nextInt(data.length());// 4、根据索引去全部字符中提取该字符code += data.charAt(index);//code =code +字符}return code;}
}
public class Reg {public static void main(String[] args) {//注册页面GongJuLei.CreateCode(6);}
}
public class Reg {public static void main(String[] args) {//注册页面GongJuLei.CreateCode(6);}
}

为什么工具类中的方法要用类方法,而不用实例方法?
- 实例方法需要创建对象来调用,此时对象只是为了调用方法,对象占内存,这样会浪费内存。
- 类方法,直接用类名调用即可,调用方便,也能节省内存。
多学一招:
- 工具类没有创建对象的需求,建议将工具类的构造器进行私有
- 使用工具类无需再创建对象,直接用类名调用,为了不让别人创建对象可以私有化构造器,这样在实例化对象时调用不了无参构造器就会失败
private GongJuLei(){}
1.3.1 static的注意事项
- 类方法中可以直接访问类的成员,不可以直接访问实例成员
- 实例方法中既可以直接访问类成员,也可以直接访问实例成员
- 实例方法中可以出现this关键字,类方法中不可以出现this关键字的
- 实例方法中可以直接访问当前类的私有成员
public class Student {static String schoolName;//类变量double score;//实例变量//1、类方法中可以直接访问类的成员,不可以直接访问实例成员public static void printHelloWorld() {// 注意:同一个类中,访问类成员,可以省略类名不写、Student.schoolName = "黑马";Student.printHelloWorld2();schoolName = "黑马";//可以省略类名不写、printHelloWorld2();//可以省略类名不写、//System.out.println(score);// 报错的 不可以直接访问实例成员//printPass();//报错的 不可以直接访问实例方法//System.out.println(this);报错的 不可以直接访问this}//类方法public static void printHelloWorld2() {}//2、实例方法中既可以直接访问类成员,也可以直接访问实例成员// 实例方法public void printPass(){schoolName ="黑马2";//访问类成员printHelloWorld2();//访问类方法System.out.println(this); //可以直接访问this}
}
1.3.1 static的应用知识:代码块
代码块概述
- 代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类)
代码块分为两种:
-
静态代码块
格式:static{}特点:类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次作用:完成类的初始化,例如:对类变量的初始化赋值。 -
实例代码块
格式:{}特点:每次创建对象时,执行实例代码块,并在构造器前执行。作用:和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值
静态代码块
public class Student {static int number =80;static String schoolName;// 静态代码块static {System.out.println("静态代码块执行了~~");schoolName =“黑马";// 初始化赋值}// 实例代码块{System.out.println("实例代码块执行了~~");}public student(){System.out.println("无参数构造器执行了~~")}public student(String name){System.out.println("有参数构造器执行了~~");}
}
public class Test {public static void main(string[] args){// 目标:认识两种代码块,了解他们的特点和基本作用。 System.out.println(student.number); //类加载时自动执行System.out.println(Student.number);System.out.println(Student.number);System.out.println(Student.schoolName);//System.out.println("---------------")Student sl =new Student();Student s2 =new Student(name:"张三");
实例代码块
每次创建对象时,执行实例代码块,并在构造器前执行 构造器也是创建对象时执行
public class Student {static int number =80;static String schoolName;// 静态代码块// 实例代码块{System.out.println("实例代码块执行了~~");System.out.println("有人创建了对象:" + this);}public student(){System.out.println("无参数构造器执行了~~")}public student(String name){System.out.println("有参数构造器执行了~~");}
}
public class Test {public static void main(string[] args){// 目标:认识两种代码块,了解他们的特点和基本作用。 System.out.println("---------------")Student sl =new Student(); Student s2 =new Student(name:"张三");
实例代码块执行了~~
无参数构造器执行了~~
实例代码块执行了~~
有参数构造器执行了~~
1.3.1 static的应用知识:单例设计模式
什么是设计模式(Design pattern)
- 一个问题通常有n种解法,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式
关于设计模式的学习,主要学什么?

单例设计模式
- 确保一个类只有一个对象。
写法
- 把类的构造器私有。
- 定义一个类变量记住类的一个对象。
- 定义一个类方法,返回对象。
public class A{// 2、定义一个类变量记住类的一个对象private static Aa= new A();//1、必须私有类的构造器private A(){}//3、定义一个类方法返回类的对象public static A getobject(){return a;}
}
public class Test1{public static void main(String[] args){// 目标:掌握单例设计模式的写法。A a1 = A.getobject();A a2 = A.getobject();System.out.println(a1);System.out.println(a2);}
}
com.itheima.d6_singleInstance.A@776ec8df
com.itheima.d6_singleInstance.A@776ec8df
单例模式的应用场景和好处?
- 任务管理器对象、获取运行时对象。
- 在这些业务场景下,使用单例模式,可以避免浪费内存。
- 饿汉式单例:拿对象时,对象早就创建好了,
- 懒汉式单例:拿对象时,才开始创建对象,
懒汉式单例设计模式
- 拿对象时,才开始创建对象
public class B{// 2、定义一个类变量,用于存储这个类的一个对象。private static B b;// 1、把类的构造器私有private B(){}//13、定义一个类方法,这个方法要保证第一次调用时才创建一个对象,后面调用时都会用这同一个对象返回。public static B getInstance(){if(b == null){b = new B();}return b;}
}
public class Test2 {public static void main(string[] args){B b1=B.getInstance();// 第一次拿对象B b2 =B.getInstance();System.out.println(b1 == b2);}
}
单例模式是用饿汉模式还是懒汉模式呢?
- 如果写的单例模式经常用 就使用饿汉模式
- 如果写的单例模式不常用就用懒汉模式 节省内存
1.4 final关键字
final 关键字是最终的意思,可以修饰(类、方法、变量)
- 修饰类:该类被称为最终类,特点是不能被继承了
- 修饰方法:该方法被称为最终方法,特点是不能被重写了
- 修饰变量:该变量只能被赋值一次。
// 1、final修饰类,类不能被继承了
final class A{}
//class B extends A {}
// 2、final修饰方法,方法不能被重写了
class C{public final void test()
}
class D extends C{@0verridepublic void test(){ //报错 }
}
public class Test{/*** 常量 : public static final 修饰的成员变量,建议名称全部大写,多个单词下划线连接*/public static final String SCHOOL_NAME ="黑马";private final String name ="猪八戒";// 这种用法没有意义,知道就行public static void main(string[] args){// 目标:认识final的作用。// 3、final可以修饰变量总规则:有且仅能赋值一次/*变量:1.局部变量2.成员变量:1、静态成员变量2、实例成员变量*/final int a;a= 12;//a=13;// 第二次赋值,出错了final double r= 3.14;//r=0.1;// 第二次赋值,出错了// schoolName =“白马";// 第二次赋值,出错了}public static void buy(final double z){//z= 0.1;// 第二次赋值,出错了}
}
final修饰变量的注意
- final修饰基本类型的变量,变量存储的数据不能被改变
- final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。
final int[]arr ={11,22,33};
// arr = null;// 第二次赋值,出错了
arr[1]= 222;
常量
使用了 static final修饰的成员变量就被称为常量,
作用:通常用于记录系统的配置信息。

使用常量记录系统配置信息的优势、执行原理
代码可读性更好,可维护性也更好。
程序编译后,常量会被“宏替换”: 出现常量的地方全部会被替换成其记住的字面量这样可以保证使用常量和直接用字面量的性能是一样的。
public class Test2 {public static final String SCHOOL_NAME ='"黑马程序员黄埔班"public static void main(string[l args){// 目标:认识常量。System.out.println(SCHOOL_NAME);System.out.println(SCHOOL_NAME);System.out.println(SCHOOL_NAME);System.out.println(SCHOOL_NAME);System.out.println(SCHOOL NAME);System.out.println(SCHOOL NAME);}
}
相关文章:
Java开发从入门到精通(九):Java的面向对象OOP:成员变量、成员方法、类变量、类方法、代码块、单例设计模式
Java大数据开发和安全开发 (一)Java的变量和方法1.1 成员变量1.2 成员方法1.3 static关键字1.3.1 static修饰成员变量1.3.1 static修饰成员变量的应用场景1.3.1 static修饰成员方法1.3.1 static修饰成员方法的应用场景1.3.1 static的注意事项1.3.1 static的应用知识…...
通过 Socket 手动实现 HTTP 协议
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
探索数据结构:双向链表的灵活优势
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty’s blog 1. 前言 前面我们学习了单链表,它解决了顺序表中插入删除需…...
记录一次服务器内存使用率过高达到90%告警问题排查。
目录 一、前言二、问题排查处理三、 结尾 👩🏽💻个人主页:阿木木AEcru 🔥 系列专栏:Docker容器化部署系列 💹每一次技术突破,都是对自我能力的挑战和超越。 一、前言 一大早就有一…...
基于react native的自定义轮播图
基于react native的自定义轮播图 效果示例图示例代码 效果示例图 示例代码 import React, {useEffect, useRef, useState} from react; import {Animated,PanResponder,StyleSheet,Text,View,Dimensions, } from react-native; import {pxToPd} from ../../common/js/device;c…...
Jetson入坑记实
关于虚拟环境python与系统自带python目录下dist-packages与site-packages dist-packages:系统自带的python site-packages:自己安装的python 详细:dist-packages与site-packages_dist-packages和site-packages-CSDN博客 rtsp获取视频流(没…...
算法系列--递归
一.如何理解递归 递归对于初学者来说是一个非常抽象的概念,笔者在第一次学习时也是迷迷糊糊的(二叉树遍历),递归的代码看起来非常的简洁,优美,但是如何想出来递归的思路或者为什么能用递归这是初学者很难分析出来的 笔者在学习的过程中通过刷题,也总结出自己的一些经验,总结来…...
【JS】替换文本为emjio表情
最终效果展示 T1 T2 T3 T4 需求 把评论你好帅啊啊啊[开心][开心],[开心] 替换为图片 思路 正则match提取[开心]到一个数组数组去重创建img标签img标签转文本. 。例:(el.outerHTML),将el元素转文本字符串replaceAll…...
Solr完结版
Solr是基于Apache Lucene构建的用于搜索和分析的开源解决方案。提供可拓展索引、搜索功能、高亮显示和文字解析功能。本质是一个java web项目,内嵌Jetty服务器,安装方便。 请求Solr中的控制器,处理完数据后把结果相应给客户端 正向索引&#…...
外包干了5天,技术退步明显。。。。
说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…...
Cronos zkEVM 基于 Covalent Network(CQT)数据可用性 API,推动其 Layer2 DeFi 生态更好地发展
在一项旨在显著改善 DeFi 生态的战略举措中,Cronos 与 Covalent Network(CQT)携手合作,以期待 Cronos zkEVM 的推出。这一整合,预计将进一步降低以太坊生态系统的交易成本、提升交易速度,并带来更好的交易体…...
基于SpringBoot的高校办公室行政事务管理系统
采用技术 基于SpringBoot的高校办公室行政事务管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 功能清单 教师信息管理 办公室管理 办公物资管…...
Linux系统及操作 (04)
Linux系统及操作 (03) RPM 软件包 网络下载对应软件包光盘镜像文件,具备软件包 Windows 系统软件包的管理 可以指定安装位置安装是集中安装到一个目录Linux 系统 与 Windows 系统相反。 常见的软件包(生态)类型 电脑入侵99%都是通过软件…...
粒子群算法 - 目标函数最优解计算
粒子群算法概念 粒子群算法 (particle swarm optimization,PSO) 由 Kennedy 和 Eberhart 在 1995 年提出,该算法模拟鸟群觅食的方法进行寻找最优解。基本思想:人们发现,鸟群觅食的方向由两个因素决定。第一个是自己当初飞过离食物…...
关于MySQL数据库的学习3
目录 前言: 1.DQL(数据查询语言): 1..1基本查询: 1.2条件查询: 1.3排序查询: 1.3.1使用ORDER BY子句对查询结果进行排序。 1.3.2可以按一个或多个列进行排序,并指定排序方向(升序ASC或降序DESC&#…...
笔试题——得物春招实习
开幕式排练 题目描述 导演在组织进行大运会开幕式的排练,其中一个环节是需要参演人员围成一个环形。演出人员站成了一圈,出于美观度的考虑,导演不希望某一个演员身边的其他人比他低太多或者高太多。 现在给出n个参演人员的身高,问…...
动手做简易版俄罗斯方块
导读:让我们了解如何处理形状的旋转、行的消除以及游戏结束条件等控制因素。 目录 准备工作 游戏设计概述 构建游戏窗口 游戏方块设计 游戏板面设计 游戏控制与逻辑 行消除和计分 判断游戏结束 界面美化和增强体验 看看游戏效果 准备工作 在开始编码之前…...
【极简无废话】open3d可视化torch、numpy点云
建议直接看文档,很多都代码老了,注意把代码版本调整到你使用的open3d的版本: https://www.open3d.org/docs/release/tutorial/visualization/visualization.html 请注意open3d应该已经不支持centos了! 从其他格式转换成open3d…...
C语言经典算法-6
文章目录 其他经典例题跳转链接31.数字拆解32.得分排行33.选择、插入、气泡排序34.Shell 排序法 - 改良的插入排序35.Shaker 排序法 - 改良的气泡排序 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠走迷官(一&…...
【计算机考研】杭电 vs 浙工大 怎么选?
想求稳上岸的话,其他几所学校也可以考虑,以留在本地工作的角度考虑,这几所学校都能满足你的需求。 如果之后想谋求一份好工作,肯定优先杭电是比较稳的,当然复习的时候也得加把劲。 这个也可以酌情考虑,报…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
