Java学习Day16:基础篇6

1.静态和非静态

2.调用静态和非静态的过程

注:在Java中,同类中,确实可以使用类的对象来调用静态方法,尽管这不是推荐的做法。静态方法属于类本身,而不是类的任何特定实例。因此,理论上讲,你应该通过类名来调用静态方法,而不是通过类的实例。

1.加载

开始调用之前需要将Tset类加载;

这一句的作用顺序也是先加载Static_ B类然后再在堆中创建对象static B,都需要先加载!

2.非静态掉用过程

非静态方法:需要通过类的实例(对象)来调用,也就是需要先创建类的对象,因为非静态方法属于类的实例,所以每个实例都可以有自己的非静态方法副本(尽管在大多数情况下,由于方法区共享,这只是一个概念上的说法)。非静态随着实例(对象)加载而加载

3.静态调用过程(蓝色)

静态方法:可以直接通过类名来调用,而无需创建类的实例。这是因为静态方法属于类本身,而不是类的某个特定对象。所以使用Static_ B.mi直接调用,跳过堆区;静态成员随着类的加载而加载。

3.调用权限

  • 静态方法只能直接访问类的静态变量静态方法,不能直接访问类的非静态变量和非静态方法。如果需要访问非静态成员,必须通过  类  对象 = new 类 来访问。

  • 非静态方法:可以访问类的静态变量、静态方法以及非静态变量和非静态方法,全都可以直接访问

4.内存占用

  • 静态方法属于类级别,理论上不占用对象的堆内存。但是,静态方法中的局部变量仍然会被存储在栈内存中。

  • 非静态方法作为对象的一部分,虽然其方法体本身不直接占用对象的堆内存,但方法的调用(包括方法中的局部变量)会占用栈内存。

5.功能分类

1.静态方法

通常用于工具类中的方法,这些方法不依赖于对象的状态,而是执行一些通用的操作(查询之类的)。

2.非静态方法

通常用于表示对象的行为,这些行为可能会修改对象的状态或基于对象的状态来执行操作,特殊性使用非静态。

6.生命周期

  • 静态方法:在类加载到JVM时就被加载到方法区,因此它的生命周期和类相同。当类被卸载时,静态方法也随之卸载。

  • 非静态方法:不直接关联于类的加载过程。非静态方法通常在创建类的实例时,随实例一起被初始化(虽然方法的实际代码仍然存储在方法区)。当实例被销毁时,非静态方法本身并不直接销毁,但其对应的实例方法调用上下文会消失

7.成员变量

分为:

8.private

实例:

public class Teacher {private int  id;private String name;private int age;public void changeid(int a ){if (a<0||a>100){System.out.println("Nope!");}else {id=a;System.out.println(age);}}public void changename(String name1){if (name1.length()>3||name1.length()==0){System.out.println("Nope!");}else {name=name1;System.out.println(name);}}public void changeage(int age1){if (age1<0||age1>130){System.out.println("Nope!");}else {age=age1;System.out.println(age);}}
}
import java.util.Scanner;public class text {static Scanner sc =new Scanner(System.in);public static void main(String[] args) {Teacher teacher = new Teacher();System.out.println("ID");int a=sc.nextInt();teacher.changeid(a);System.out.println("NAME");String name1= sc.next();teacher.changename(name1);System.out.println("AGE");int age1 = sc.nextInt();teacher.changeage(age1);}
}

9.this

在Java中,this关键字是一个非常重要的概念,它主要用于指代当前对象。this关键字在Java中有多种用途,但主要可以归结为以下几个方面:

  1. 引用当前对象的属性和方法
    当你需要在类的方法内部引用当前对象的成员(字段或方法)时,可以使用this关键字。这在方法中的局部变量与类的成员变量同名时特别有用,因为this可以明确指明你是在引用类的成员变量。

  2. 在构造器中调用另一个构造器
    在Java中,你可以在一个构造器中使用this()语法来调用同一个类的另一个构造器。注意,这种调用必须是构造器中的第一条语句。

  3. 返回当前对象的引用
    在某些情况下,this可以用于返回当前对象的引用。这在实现链式调用(如StringBuilder类中的方法)时非常有用。

  4. 区分隐藏的成员
    当子类从父类继承了一个成员(字段或方法),并且子类定义了同名的成员时,子类成员会隐藏父类的成员。此时,在子类中可以通过this关键字引用子类成员,通过super关键字引用父类成员。

public class Teacher {private int  id;private String name;private int age;public Teacher() {}public Teacher(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public void setIid(int id ){if (id<0||id>100){System.out.println("Nope!");}else {this.id=id;}}public void setName(String name){if (name.length()>3||name.length()==0){System.out.println("Nope!");}else {this.name=name;}}public void setAge(int age){if (age<0||age>130){System.out.println("Nope!");}else {this.age=age;}}public int getId() {return id;}public String getName() {return name;}public int getAge() {return age;}public String toString() {return "Teacher{id = " + id + ", name = " + name + ", age = " + age + "}";}
}
import java.util.Scanner;public class text {static Scanner sc =new Scanner(System.in);public static void main(String[] args) {Teacher teacher = new Teacher();System.out.println("ID");int id=sc.nextInt();teacher.setIid(id);System.out.println(teacher.getId());System.out.println("NAME");String name= sc.next();teacher.setName(name);System.out.println(teacher.getName());System.out.println("AGE");int age = sc.nextInt();teacher.setAge(age);System.out.println(teacher.getAge());}
}

10.构造方法

在Java中,构造方法(Constructor)是一种特殊类型的方法,用于在创建对象时初始化对象。它不具有返回类型void都不写。构造方法的名称必须与类名完全相同,并且可以通过不同的参数列表来重载构造方法,就像重载普通方法一样。

以下是构造方法的一些关键特点:

  1. 名称与类名相同:构造方法的名称必须与类名完全匹配。
  2. 没有返回类型:连void都不写。
  3. 主要作用是初始化:在创建对象时自动调用,用于初始化对象的成员变量。
  4. 可以被重载:一个类可以有多个构造方法,只要它们的参数列表不同即可。
  5. 默认构造方法:如果类中没有显式定义任何构造方法,则编译器会自动提供一个无参的默认构造方法。但是,一旦定义了至少一个构造方法,编译器就不会再提供默认构造方法了。

11.标准类

12.无参数构造方法应用场景

小练习:

package NumberSystem;
import java.util.Scanner;
public class NMM {String name;int count;double price;public NMM() {}NMM [] shopList =new NMM[100];Scanner sc = new Scanner(System.in);public void Caidan (){for (;;) {System.out.println("------欢迎使用数据库管理系统------");System.out.println("1:Check Data");System.out.println("2:Change Date");System.out.println("3:Add Date");System.out.println("4:Del Date");System.out.println("5:Display All");System.out.println("6:Quit");System.out.println("输入编号:");int num = sc.nextInt();int temp = 0;if (num==1){System.out.println("正在使用数据查询功能,请输入name:");String name =sc.next();getMessage(name);}//1.查询功能if (num==2){System.out.println("正在使用数据修改功能,请输入name:");String name =sc.next();update(name);}//修改数据功能if (num==3){System.out.println("正在使用数据录入功能,请输入name:");String name =sc.next();System.out.println("正在使用数据录入功能,请输入count:");int count =sc.nextInt();System.out.println("正在使用数据录入功能,请输入price:");double price = sc.nextDouble();add(name,count,price);}//添加数据功能if (num == 4) {System.out.println("正在使用数据删除功能,请输入name:");String name =sc.next();del(name);} //删除数据功能if (num==5){for (int i = 0; i < shopList.length; i++) {if (shopList[i] != null) { // 首先检查 shopList[i] 是否为 nullif (shopList[i].getName() != null) {String na = shopList[i].getName();int con = shopList[i].getCount();double pri = shopList[i].getPrice();String str = toString(na, con, pri); // 假设 toString 是一个有效的方法System.out.println(str);} else {// 这里处理 getName() 返回 null 的情况System.out.println("位置 " + i + " 的商品名称为 null");break;}} else {// 这里处理 shopList[i] 为 null 的情况System.out.println("位置 " + i + " 的整个商品对象为 null");break;}}}if (num==6){break;}//跳出循环}}private void del(String name) {for (int i = 0; i< shopList.length; i++) {if(shopList[i].getName().equals(name)){shopList[i].setName(null);shopList[i].setCount(0);shopList[i].setPrice(0.0);System.out.println("删除成功!");break;}}}//删除数据private void update(String name) {for (int i = 0; i< shopList.length; i++) {if(shopList[i].getName().equals(name)){System.out.println("正在使用数据修改功能,请输入修改后的name:");String na =sc.next();System.out.println("正在使用数据修改功能,请输入修改后的count:");int con =sc.nextInt();System.out.println("正在使用数据修改功能,请输入修改后的price:");double pri = sc.nextDouble();shopList[i].setName(na);shopList[i].setCount(con);shopList[i].setPrice(pri);String str= toString(na,con,pri);System.out.println(str);break;}}}//更新数据模块private void getMessage(String name) {for (int i = 0; i< shopList.length; i++) {if(shopList[i].getName().equals(name)){String na= shopList[i].getName();int con =shopList[i].getCount();double pri= shopList[i].getPrice();String str= toString(na,con,pri);System.out.println(str);break;}}
}//查询模块private void add(String name,int count,double price) {for (int i = 0; i< shopList.length; i++) {if(shopList[i]==null){shopList[i]=new NMM();//初始化!!!!!!!!!!!shopList[i].setName(name);shopList[i].setCount(count);shopList[i].setPrice(price);String str= toString(shopList[i].getName(),shopList[i].getCount(),shopList[i].getPrice());System.out.println(str);break;}System.out.println(shopList[i]);}}//添加模块public String toString(String name,int count ,double price) {return "添加后数据:{name = " + name + ", count = " + count + ", price = " + price + "}";}public NMM(String name, int count, double price) {this.name = name;this.count = count;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}}

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

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

相关文章

【iOS】—— KVO与KVC

KVO与KVC 1. KVOKVO底层实现分析如何验证上面的说法&#xff1a;NSKVONotifyin_Person内部结构didChangeValueForKey:内部会调用observer的observeValueForKeyPath:ofObject:change:context:方法 回答问题&#xff1a; 2. KVC简介&#xff1a;key和keyPath的区别key&#xff1a…

探索 Electron:如何进行网址收藏并无缝收录网页图片内容?

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;如 HTML、CSS 和 JavaScript&#xff09;构建跨平台的桌面应用程序&#xff0c;它的出现极大地简化了桌面应用程序的开发流程&#xff0c;让更多的开发者能够利用已有的 Web 开发技能…

EtherNet/IP转CAN协议转化网关(功能与配置)

怎么样把EtherNet/IP和CAN两个协议连接起来?有很多朋友想要了解这个问题&#xff0c;那么作者在这里统一说明一下。其实有一个不错的设备产品可以很轻易地解决这个问题&#xff0c;名为JM-EIP-ECAT网关。接下来作者就从该设备的功能及配置详细说明一下。 一&#xff0c;设备主…

聊聊基于Alink库的主成分分析(PCA)

概述 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种常用的数据降维和特征提取技术&#xff0c;用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为一组新的互相无关的变量&#xff0c;这些新变量称为主成分&…

TinyMCE一些问题

1.element 在el-dialog中使用tinymce导致富文本弹窗在el-dialog后面的问题 原因是富文本的弹窗层级太低了 在APP.vue中添加样式即可解决 /* 富文本菜单 */ .tox-tinymce-aux {z-index: 9999 !important; }2.element 在el-dialog中点击富文本的功能栏报错 由于 aria-hidden 属…

Midjourney、Sora和硅谷机密-《分析模式》漫谈15

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 “Analysis Patterns”的Preface&#xff08;前言&#xff09;有这么一句&#xff1a; Kent Beck, Ward Cunningham, and Jim Coplein encouraged me to get involved with the commu…

虚假的互联网信息?不妨从IT的角度理解【景观社会】

博主前言&#xff1a;“我思故我在”&#xff0c;笛卡尔的这一哲学命题&#xff0c;大抵上次还比较熟络的时光还是高中亦或复习考研政治的岁月里。这是一个光怪陆离的社会——或者说网络社会&#xff0c;形形色色的消息充斥在脑海之时&#xff0c;你是否还能认识真正的自己&…

YOLOV8-源码解读-SPP-SPPF

先给出YOLOV8中一键三连卷积模块 def autopad(k, pNone, d1): # kernel, padding, dilation"""Pad to same shape outputs."""if d > 1:k d * (k - 1) 1 if isinstance(k, int) else [d * (x - 1) 1 for x in k] # actual kernel-sizeif…

分布式事务解决方案(一) 2PC、3PC、TCC、Sega

目录 1.绪论 2.2PC 2.1 基本原理 2.1.1 组成 2.1.2 步骤 1.prepare阶段 2.commit阶段 2.2 2PC 存在的问题 2.2.1 阻塞问题 2.2.2 单点故障问题 1. 事务协调器宕机 2.部分数据不一致问题 2.资源管理器宕机 3. 事务协调器和资源管理管理器同时宕机 2.2 实现 2.2.1…

怎么将几个pdf合成为一个pdf?pdf合成为一个的常用方法

在现代的职场和学术环境中&#xff0c;如何将多个独立的PDF文档合并成一个统一的文件已经成为提高工作效率、优化文档管理和促进信息共享的重要手段。PDF格式以其卓越的跨平台兼容性、强大的数据保护能力以及清晰易读的版面设计&#xff0c;在全球范围内得到了广泛的应用和认可…

2-45 基于matlab的递归最小二乘法(RLS)对声音信号去噪

基于matlab的递归最小二乘法&#xff08;RLS&#xff09;对声音信号去噪,并对消噪前后的信号进行FFT分析&#xff0c;对比消噪前后的效果。可替换自己的声音信号进行分析。程序已调通&#xff0c;可直接运行。 2-45 递归最小二乘法&#xff08;RLS&#xff09; FFT分析 - 小红书…

系统移植(七)u-boot移植 ④ trusted版本

文章目录 一、U-boot源码适配&#xff08;一&#xff09;执行make stm32mp15_trusted_defconfig命令进行配置&#xff0c;生成.config文件&#xff08;二&#xff09;执行make menuconfig命令&#xff0c;对u-boot源码进行重新配置1. 对u-boot源码进行配置&#xff0c;移除pmic…

【C++进阶学习】第十弹——哈希的原理与实现——链地址法的原理与讲解

开放地址法&#xff1a;【C进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解-CSDN博客 前言&#xff1a; 哈希的整体思想就是建立映射关系&#xff0c;前面的开放地址法的讲解中&#xff0c;也对哈希的原理做了详细的讲解&#xff0c;今天就来讲解一下实现哈希的另一…

Java NIO (一)

因工作需要我接触到了netty框架&#xff0c;这让我想起之前为夺高薪而在CSDN购买的Netty课程。如今看来&#xff0c;这套课程买的很值。这套课程中关于NIO的讲解&#xff0c;让我对Tomcat产生了浓厚的兴趣&#xff0c;于是我阅读了Tomcat中关于服务端和客户端之间连接部分的源码…

如何快速获取全网精准客流?揭秘不为人知的5大运营策略!

有同行所在的地方&#xff0c;就一定拥有咱们需要的客户。客户看的是结果&#xff0c;搜索的是问题&#xff0c;寻找的是答案。 如果没有付费流量&#xff0c;单纯靠搞免费流量&#xff0c;很多大厂的运营也会变得一文不值。一个牛逼的运营&#xff0c;不仅是会做付费流量&…

leetcode10 -- 正则表达式匹配

题目描述&#xff1a; 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 示例 1&#xff1…

PDF转Word后不能修改怎么办?是什么原因呢?

平时在生活中&#xff0c;很多朋友都会有将PDF转换成Word文档的需求&#xff0c;因为一般情况下PDF文件是不能直接编辑修改的&#xff0c;所以只能通过这种方式来解决问题。但是近期&#xff0c;有部分用户在后台反馈说PDF转Word后不能修改怎么办呢&#xff1f;其实这个问题也是…

第1-3章Excel数据分析基础

文章目录 第1章&#xff1a;使用统计函数做数据分析1-1常用统计函数应用1-2条件统计函数1-3多条件统计函数1-4条件统计函数中的通配符1-5将条件统计函数中的条件数组化1-6单条件文本合并-新增函数1-7多条件与模仿通配符的文本合并 第2章&#xff1a;数据分析之合并计算2-1合并计…

备忘录系统

目录 一、 系统简介 1.简介 2需求分析 3 编程环境与工具 二、 系统总体设计 1 系统的功能模块图。 2 各功能模块简介 3项目结构 4 三、 主要业务流程 &#xff08;1&#xff09;用户及管理员登录流程图 &#xff08;2&#xff09;信息添加流程 &#xff0…