Java开发从入门到精通(九):Java的面向对象OOP:成员变量、成员方法、类变量、类方法、代码块、单例设计模式

news2025/1/11 0:18:11

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的应用知识:单例设计模式
        • 懒汉式单例设计模式

(一)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);
	}
}

单例模式是用饿汉模式还是懒汉模式呢?

  • 如果写的单例模式经常用 就使用饿汉模式
  • 如果写的单例模式不常用就用懒汉模式 节省内存

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

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

相关文章

03-java基础-运算符(数据类型转换)、原码、补码、反码

一、运算符 一、1、算术运算符 在代码中如果有小数参与运算&#xff0c;结果有可能会不精确。 一、1.1、数字相加 一、1.1.1、类型转换的分类&#xff08;2种&#xff09; 一、1.1.1.1、类型转换的分类1-----隐式转换 一、1.1.1.1、类型转换的分类2-----强制转换 一、1.2、字符…

海外媒体宣发套餐推广:如何选择最佳方案-华媒舍

在信息时代&#xff0c;传播和宣传已经成为各个行业发展的关键部分。尤其对于拓展国际市场的企业来说&#xff0c;海外媒体宣发更是至关重要。由于各种原因&#xff0c;很多企业在选择海外媒体宣发套餐时感到困惑。本文将为您介绍如何选择最佳的海外媒体宣发方案。 1.了解目标市…

工匠的发展与兴衰趋势-机器人篇

这是一篇纯纯调侃的博客&#xff0c;如有雷同纯属意外。 之前&#xff0c;写过&#xff1a; 从2050回顾2020&#xff0c;职业规划与技术路径&#xff08;节选&#xff09; 从2050回顾2020&#xff0c;职业规划与技术路径&#xff08;节选&#xff09;补充 未来以“工”为主的…

LarkXR上新了 | Apollo多终端与XR体验的优化创新

作为领先的数字平行世界产品技术提供方&#xff0c;「Paraverse平行云」一直致力于为企业和开发者提供企业级实时云渲染解决方案。其多终端接入产品LarkXR Apollo&#xff0c;基于底层Runtime技术&#xff0c;实现了在Windows、Linux、MacOS、Android、iOS等多种操作系统下&…

centos破解root密码以及如何防止他人破解root密码

目录 破解root密码 服务器重启 1.再重启页面上下选择第一个按e进入内核编辑模式 2.找到linux16开头的一行&#xff0c;光标移动到最后添加 init/bin/sh Ctrlx 保存 3.进入单用户模式 4.重新挂在根分区 5.关闭selinux 6.更新密码 passwd 7.在根分区下面创建一个隐藏文件…

字符串函数(C语言详解)

1.字符串简介 字符串是一串连续的且以\0结尾的字符 char arr[]"zhangsan";//将字符串存到数组里面 char*a"lisi";//常量字符串 char arr1[]{z,h,a,n,g};//字符数组 注意&#xff1a; 1.以第一种形式初始化字符串时&#xff0c;计算机会自动在字符串末尾加…

leetcode-打家劫舍专题系列(动态规划)

198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

C# WPF中设置图标时出现TypeConverterMarkupExtension异常

异常内容为&#xff1a;System.Windows.Baml2006.TypeConverterMarkupExtension 是因为有些地方比如菜单和左上角默认的图标等&#xff0c;只能使用ico格式的文件&#xff0c;如果设置的是png格式的文件&#xff0c;就会出现此错误&#xff01;通过在线转ico的方式把png转换一…

【Maven学习笔记】Maven入门教程(适合新手反复观看学习)

Maven学习笔记 Maven的简要介绍Maven的安装和配置Maven的安装Maven安装的常用配置 Maven的使用入门编写pom编写主代码编写测试代码打包和运行使用Archetype生成项目骨架 Maven核心概念的阐述坐标案例分析依赖依赖的范围传递性依赖依赖范围依赖调节可选依赖Maven依赖常用的技巧 …

《ARM汇编与逆向工程》读书心得与实战体验

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 一、引言 &#x1f4dd; 二、…

vite打包流程和原理

文章目录 打包原理Vite比Webpack快&#xff1f;在生产环境下的表现启动项目后&#xff0c;完成加载比较慢&#xff1f;Esbuild & Rollup热更新 打包原理 vite利用了ES module这个特性&#xff0c;使用vite运行项目时&#xff0c;首先会用esbuild进行预构建&#xff0c;将所…

音视频如何快速转二维码?在线生成音视频活码的教程

音频文件的二维码制作步骤是什么样的呢&#xff1f;扫描二维码来展现内容是很流行的一种方式&#xff0c;基本上日常生活中经常会用的图片、音频、视频等都可以使用生成二维码的方式。现在很多的幼儿园或者学校会录制孩子的音频或者视频内容用来展示&#xff0c;那么二维码制作…

Kafka配置SASL_PLAINTEXT权限。常用操作命令,创建用户,topic授权

查看已经创建的topic ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list 创建topic 创建分区和副本数为1的topic ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic acltest --partitions 1 --replication-factor 1 创建kafka用户 …

酷轻松气囊按摩护膝全新上线,科技呵护膝部健康

在快节奏的现代生活中&#xff0c;膝部健康问题逐渐引起人们的重视。长时间的站立、行走或运动&#xff0c;都可能对膝部造成不同程度的压力和损伤。 特别是家里有老人一直被老寒腿、关节发凉疼痛困扰的&#xff0c;经常一遇到下雨天&#xff0c;膝盖就不舒服&#xff1b;尤其到…

2 .Gen<I>Cam模块介绍

模块组成&#xff1a;GenApi&#xff0c;SFNC&#xff0c;GenTL&#xff0c;GenDC&#xff0c;GenCP。 首先让我来看下 GenTL (Transport Layer) GenApi( sometimes simply called the GenICam Standard) 传统相机应用程序二次开发&#xff0c;是基于相机厂家提供的sdk。使用…

python:消息推送 - 飞书机器人推送 - 富文本格式

简介&#xff1a;机器人 ( bot ) 是一种自动化的程序&#xff0c;可以用拟人化的身份自动推送消息&#xff0c;或在聊天里与你进行简单的交互。在自动化完成测试任务后&#xff0c;推送测试报告等是一种很常用的收尾工具。 历史攻略&#xff1a; python&#xff1a;消息推送 …

Python爬虫 Day1

要注意看网页的请求方式是request还是get 一、小型爬虫 &#xff08;爬百度首页&#xff09; from urllib.request import urlopen url "https://www.baidu.com" resp urlopen(url) print(resp.read().decode(utf-8)) print("over!") //&#xff01;&am…

DHCP在企业网的部署及安全防范

学习目标&#xff1a; 1. DHCP能够解决什么问题&#xff1f; 2. DHCP服务器如何部署&#xff1f; 3. 私接设备会带来什么问题以及如何防范&#xff1f; 给DHCP服务器配置地址&#xff1a; 地址池&#xff1a; DHCP有2种分配模式&#xff1a;全局分配和接口分配 DHCP enable

【矩阵】48. 旋转图像【中等】

旋转图像 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,…