初学Java基础Day15---面相对象之this,static关键字,静态代码块

news2024/10/10 0:17:38

一,this关键字

1.概念:

        表示本对象

2.理解:

        哪个对象调用该方法,该方法里的this就表示该对象

3.作用:

        1.this.属性 : 调用本对象的成员属性

        2.this.方法 : 调用本对象的成员方法

        3.this() : 在构造方法的第一句调用本类另外的构造方法

4.代码实现
//作用2举例:
//代码详细接Day14“模拟银行用户操作余额的功能”中User类

//添加一个转账的方法
public voud transferAccount(String userName,double money){

    //获取本对象的余额,判断是否比转账的金额更多
    if(this.getSurplus() >money){
		
        //将当前用户余额的money部分转给对方账号
        this.setSurplus(this.getSurplus() -money);//此处this可省略
        System.out.println("已经给"+this.userName+"转账成功");
    }else{
        System.out.println("余额不足");
    }
    
}
//作用3举例:
//代码接上面“模拟银行用户操作余额的功能”中User类

public class User{
    String userName;
    String password;
    String name;
    String phone;
    char sex;
    private double surplus;//余额
    
/*    public User() {
        //在当前构造方法中调用另一个构造方法
        this("默认账号","默认密码","亚当","12388786",'男',0.0);
	}
    
    public User(String username,  String name, String phone, char sex, double surplus){
        //在当前构造方法中调用另一个构造方法
        this(usename,"000000",name,phone,sex,surplus)
    }
    
*/

	public User(String username, String password, String name, String phone, char sex, double surplus) {
		this.username = username;
		this.password = password;
		this.name = name;
		this.phone = phone;
		this.sex = sex;
		this.surplus = surplus;
	}
    
    //设置余额
    public void setSurplus(double surplus){
        
        //额外的功能
		double num = (surplus - this.surplus);//现在金额-原来金额
		System.out.println(LocalDateTime.now() + " -- " + this.name + "用户操作了金额:" + ((num>0)?"+":"") + num);

        	//设置属性
			this.surplus = surplus;
    }
    
    //获取余额
    public double getSurplus(){
        
        //额外的功能
		System.out.println(LocalDateTime.now() + " -- " + this.name + "用户获取了金额");

        //返回余额
        return surplus;
    }

}

二,分包

基本作用:防止了类的重名问题

项目作用:项目中有众多的类,把相同功能的类放在同一个包中,方便管理

三,static关键字

1.static修饰属性
//实验

public class Test01{
    public static void main(String[] args){

        A a1 = new A();
        A a2 = new A();
        
        a1.str1 ="aaa";
        a2.str1 = "bbb";
        System.out.println(a1.str1);//aaa
        System.out.println(a2.str);//bbb
        
  // 注意:静态属性属于类的属性,直接使用类名调用,使用对象调用会出现警告
       	A.str2 = "xxx";
       	A.str2 = "yyy";
        System.out.println(A.str2);// yyy
        System.out.println(A.str2);// yyy
    }
}

public class A{
    
    //成员属性
    String str1;
    
    //静态属性
    static String str2;
}
1.概念:

1.成员属性:每个对象独享一份

2.静态属性:每个对象共享一份

2.静态属性何时创建?

使用到类,JVM会判断方法区中是否有改类的class文件,如果没有,就把改类的class文件加载到方法区,JVM会扫描该类的所有属性,并把静态属性添加到静态区中(步骤:1.开辟空间,2.赋系统默认值)。

3.静态属性何时销毁?

项目结束时,静态属性才会被销毁,所以静态属性的生命周期很长,项目中使用需谨慎

4.静态属性的应用场景

该类所有的对象需要共享的属性,就可以设置为静态

5.注意:

静态属性属于类的属性,直接使用类名调用,使用对象调用会出现警告

2.static 修饰方法
1.成员方法 VS静态方法

成员方法:必须使用对象调用,也就是说调用成员方法之前必须创建对象(开辟空间)

静态方法:属于类的方法直接使用类名调用,纯功能的方法就可以设计成静态方法如(工具类)如: Arrays

2.需求

        模仿Java的Arrays类,编写自己的MyArrays

//目的:1.掌握工具类的概念,2.回顾之前的知识点 3.理解文档注释的作用

public class MyArrays {

	/**
	 * 数组的排序
	 * @param a 目标数组
	 */
	public static void sort(int[] a){
		for (int i = 0; i < a.length-1; i++) {
			for (int j = 0; j < a.length-1-i; j++) {
				if(a[j] > a[j+1]){
					int temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
				}
			}
		}
	}
	
	/**
	 * 数组的查找,必须先排序,在查找
	 * @param a 目标数组
	 * @param key 需要查找的键
	 * @return 如果搜索的元素包含在数组中就返回元素的下标; 否则,返回(-插入点-1)
	 */
	public static int binarySearch(int[] a,int key){
		int start = 0;
		int end = a.length-1;
		while(start <= end){
			int mid = (start+end)/2;
			if(key < a[mid]){
				end = mid-1;
			}else if(key > a[mid]){
				start = mid+1;
			}else{
				return mid;
			}
		}
		return -start-1;
	}
	
	/**
	 * 拷贝数组
	 * @param original 目标数组
	 * @param newLength 新数组的长度
	 * @return 新数组
	 */
	public static int[] copyOf(int[] original, int newLength){
		
		int copyLength = original.length;
		if(copyLength > newLength){
			copyLength = newLength;
		}
		
		int[] newArr = new int[newLength];
		
		for (int i = 0; i < copyLength; i++) {
			newArr[i] = original[i];
		}
		return newArr;
	}
	
	/**
	 * 拷贝区间数组
	 * @param original 目标数组
	 * @param from 开始下标-包含
	 * @param to 结束下标 - 排他
	 * @return 新数组
	 */
	public static int[] copyOfRange(int[] original, int from, int to){
		
		int newLength = to-from;
		int[] newArr = new int[newLength];
		
		int index = 0;
		for (int i = from; i < to; i++) {
			newArr[index++] = original[i];
		}
		return newArr;
	}
	
	/**
	 * 替换全部元素
	 * @param a 目标数组
	 * @param val 替换的值
	 */
	public static void fill(int[] a, int val){
		fill(a, 0, a.length, val);
	}
	
	/**
	 * 替换区间元素
	 * @param a 目标数组
	 * @param fromIndex 开始下标 - 包含
	 * @param toIndex 结束下标 - 排他
	 * @param val 替换的值
	 */
	public static void fill(int[] a, int fromIndex, int toIndex, int val){
		for (int i = fromIndex; i < toIndex; i++) {
			a[i] = val;
		}
	}
	
	/**
	 * 将数组转换为字符串
	 * @param a 目标数组
	 * @return 转换后的字符串
	 */
	public static String toString(int[] a){
		String str = "[";
		for (int element : a) {
			if(str.length() != 1){
				str += ",";
			}
			str += element;
		}
		str += "]";
		
		return str;
	}
	
}

四,导出,导入Jar包 导出API

五,静态代码块

都在代码里.....

//实验
public class Test01{

    public static void main(String[] args){
        
    }
}

public class A{
    
    //静态属性比成员属性更早的在内存中存在
    String str1; //成员属性
   static  String str2; //静态属性
    
    //静态代码块:class文件加载到方法区是调用 
    //作用:操作静态属性,不能操作成员属性
    static{
         System.out.println("静态代码块");
    }
    
    //代码块:创建对象时优先于构造方法调用
    //作用:也可以操作成员属性和静态属性(即可以初始化属性)
    {
        System.out.println("代码块");
    }
    
    //构造方法:创建对象时调用构造方法
    //作用:操作成员属性和静态属性(即可以初始化属性)
    public A(){

        str1 = "aaa"; //底层实现:this.str1 = "aaa";
        str2 = "bbb"; //底层实现:A.str2 ="bbb";
        System.out.println("构造方法--"+str1+"---"+str2);
    }
}

经验:

1.创建对象时,在构造方法中初始化数据;

2.项目中可以在静态代码块中初始化静态属性

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

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

相关文章

【数据结构与算法-高阶】并查集

【数据结构与算法-高阶】并查集 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;数据结构与算法&#x1f345; &#x1f33c;文章目录&#x1f33c; 1. 并查集原理 2. 并查集实现 3. 并查集应用 1. 并查集原理 在一些应用问题中&…

Matlab|基于遗传粒子群算法的无人机路径规划【遗传算法|基本粒子群|遗传粒子群三种方法对比】

目录 主要内容 模型研究 部分代码 结果一览 下载链接 主要内容 为了更高效地完成复杂未知环境下的无人机快速探索任务&#xff0c;很多智能算法被应用于无人机路径规划方面的研究&#xff0c;但是传统粒子群算法存在粒子更新思路单一、随机性受限、收敛速度慢…

修改calibre-web最大文件上传值

修改calibre-web最大文件上传值 Windows安装calibre-web&#xff0c;Python-CSDN博客文章浏览阅读541次&#xff0c;点赞10次&#xff0c;收藏11次。pip install calibreweb报错&#xff1a;error: Microsoft Visual C 14.0 or greater is required. Get it with "Microso…

案例:问题处理与原因分析报告的模板

系统上线后暴露的问题也是一种财富&#xff0c;我们需要从中吸收经验教训&#xff0c;规避其他类似的问题。对于上线后的问题如何进行原因分析&#xff0c;我提供两个分析报告的模板&#xff0c;供大家参考。 模板案例1&#xff1a;共性现象的原因分析报告 模板案例二&#xf…

C(十三)for、while、do - while循环的抉择 --- 打怪闯关情景

前言&#xff1a; 继C&#xff08;十&#xff09;for循环 --- 黑神话情景之后&#x1f449; https://blog.csdn.net/2401_87025655/article/details/142684637 今天&#xff0c;杰哥想用一个打怪闯关的场景让与大家一起初步认识一下for、while、do - while循环的抉择。&#xf…

Docker在linux系统中的下载与使用

Docker在linux系统中的下载与使用 一、docker作用,下载及安装二、docker镜像三、创建容器四、容器数据卷 一、docker作用,下载及安装 ubuntu下载安装docker 命令&#xff1a;在ubuntu上面执行这个命令 Docker version:查看docker是否安装成功 配置阿里云镜像加速:进入阿里云网站…

阿里140滑块-滑块验证码逆向分析思路学习

一、声明&#xff01; 原创文章&#xff0c;请勿转载&#xff01; 本文内容仅限于安全研究&#xff0c;不公开具体源码。维护网络安全&#xff0c;人人有责。 文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;均已做脱敏处…

JUC高并发编程8:读写锁

1 概述 1.1 悲观锁和乐观锁 在并发编程中&#xff0c;锁机制是用来控制多个线程对共享资源的访问。悲观锁和乐观锁是两种不同的并发控制策略。 1.1.1 悲观锁&#xff08;Pessimistic Locking&#xff09; 悲观锁假设在最坏的情况下&#xff0c;多个线程会同时访问和修改共享…

Qt-QDockWidget浮动窗口相关操作(49)

目录 描述 使用 描述 在 Qt 中&#xff0c;浮动窗⼝也称之为铆接部件。浮动窗⼝是通过 QDockWidget类 来实现浮动的功能。浮动窗口⼀般是位于核心部件的周围&#xff0c;可以有多个。 使用 创建我们可以参考下面的语法格式 使用起来也很简单&#xff0c;不过只能创建一个 Q…

【C语言】使用结构体实现位段

文章目录 一、什么是位段二、位段的内存分配1.位段内存分配规则练习1练习2 三、位段的跨平台问题四、位段的应用五、位段使用的注意事项 一、什么是位段 在上一节中我们讲解了结构体&#xff0c;而位段的声明和结构是类似的&#xff0c;它们有两个不同之处&#xff0c;如下&…

创建osd加入集群

故障原因&#xff1a;ceph节点一个磁盘损坏&#xff0c;其中osd69 down了&#xff0c;需要更换磁盘并重新创建osd加入ceph集群。 信息采集&#xff1a; 更换磁盘前&#xff0c;查询osd69对应的盘符&#xff1a; 将对应的故障磁盘更换后&#xff0c;并重做raid&#xff0c;然后查…

SDK4(note下)

以下代码涉及到了很多消息的处理&#xff0c;有些部分注释掉了&#xff0c;主要看代码 #include <windows.h> #include<tchar.h> #include <stdio.h> #include <strsafe.h> #include <string> #define IDM_OPEN 102 /*鼠标消息 * 键盘消息 * On…

76.【C语言】perror函数介绍

1.cplusplus的官网介绍 cplusplus的介绍 点我跳转 2.翻译 函数 perror void perror ( const char * str ); 打印错误信息 将errno(最后一个错误数字)的值解释为错误信息,之后把它打印到stderr中(标准错误输出流,通常是控制台)(备注有关"流"的概念在75.【C语言】文件…

k8s-pod的管理及优化设置

Pod是Kubernetes&#xff08;k8s&#xff09;中最小的资源管理组件&#xff0c;也是最小化运行容器化应用的资源对象。以下是对Pod的详细介绍&#xff1a; 一、Pod的基本概念 定义&#xff1a;Pod是Kubernetes中可以创建和管理的最小单元&#xff0c;是资源对象模型中由用户创…

网站排名,让网站快速有排名的几个方法

要让网站快速获得并提升排名&#xff0c;需要综合运用一系列专业策略和技术&#xff0c;这些策略涵盖了内容优化、技术调整、外链建设、用户体验提升等多个方面。以下是让网站快速有排名的几个方法&#xff1a; 1.内容为王&#xff1a;创造高质量、有价值的内容 -深入…

geolocator插件的用法

文章目录 1. 概念介绍2. 使用方法3. 示例代码4 体验分享我们在上一章回中介绍了如何实现滑动菜单相关的内容,本章回中将介绍如何获取位置信息.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里说的获取位置信息本质上是获取当前手机所在位置的gps坐标,就是我们…

【Chrome浏览器插件--资源嗅探猫抓】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、资源嗅探插件---猫抓二、使用步骤总结 一、资源嗅探插件—猫抓 猫抓是一个浏览器插件&#xff0c;可以检测当前网页中的一些资源文件&#xff0c;可设置嗅探的…

NVIDIA机密计算文档

NVIDIA 可信计算解决方案 文章目录 前言一、指南1. Intel TDX - 机密计算部署指南2. AMD SNP - 机密计算部署指南3. NVIDIA Hopper 机密计算证明文档4. nvtrust GitHub二、发行说明1. 550TRD3 - NVIDIA 可信计算解决方案发行说明2. 550TRD1 - NVIDIA 可信计算解决方案发行说明三…

The Android SDK location cannot be at the filesystem root

win11&#xff0c; 安装启动完Android Studio后&#xff0c;一直显示 The Android SDK location cannot be at the filesystem root因此需要下载SDK包&#xff0c;必须开启代理。 开启代理后&#xff0c;在System下开启自动检测代理&#xff0c;如图 重启Android Studio&a…

任务【浦语提示词工程实践】

0.1 环境配置 首先点击左上角图标&#xff0c;打开Terminal&#xff0c;运行如下脚本创建虚拟环境&#xff1a; # 创建虚拟环境 conda create -n langgpt python3.10 -y 运行下面的命令&#xff0c;激活虚拟环境&#xff1a; conda activate langgpt 之后的操作都要在这个环境…