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,一经查实,立即删除!

相关文章

设备树作业7月29日

demo.c #include <linux/init.h> #include <linux/module.h> #include <linux/of.h>struct device_node* node; struct property* property; /* mynode0x12345678{ //mynode节点名字mystring "hello DC24031";//字符串属性myint <0x12 0x34 …

【iOS】—— KVO与KVC

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

“支付”到“智付” 数字人民币场景加速落地

在全球化浪潮的推动下&#xff0c;跨境电商如雨后春笋般涌现&#xff0c;它们跨越国界&#xff0c;将商品和服务直接送达消费者手中。然而&#xff0c;当外国的跨境电商希望进入中国市场时&#xff0c;他们面临着一个共同的挑战&#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;设备主…

Angular 遍历列表时的key

在Angular中&#xff0c;你可以使用keyvalue管道来遍历对象的键。这里是一个简单的例子&#xff0c;展示了如何在Angular模板中使用它&#xff1a; <div *ngFor"let key of myObject | keyvalue:key">Key: {{ key }} - Value: {{ myObject[key] }} </div&g…

springboot中hutool-core依赖的使用

springboot中hutool-core依赖的使用 依赖安装1、StrUtil.isBlank() 依赖安装 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-core --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-core</artifactId><ver…

在Android开发中,如何优化onCreate()和onResume()方法以提高应用性能?

在Android开发中&#xff0c;onCreate()和onResume()方法是活动生命周期中非常重要的两个回调方法&#xff0c;它们分别在活动创建和重新获得焦点时被调用。为了提高应用的性能&#xff0c;以下是一些优化这两个方法的策略&#xff1a; 对于onCreate()方法的优化&#xff1a; …

聊聊基于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…

全国区块链职业技能大赛样题第9套智能合约+数据库表设计

后端源码地址:https://blog.csdn.net/Qhx20040819/article/details/140746050 前端源码地址:https://blog.csdn.net/Qhx20040819/article/details/140746216 智能合约+数据库表设计:https://blog.csdn.net/Qhx20040819/article/details/140746646 nice.sql /* Navicat MySQ…

分布式事务解决方案(一) 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…

wire和reg的区别

在 Verilog 中&#xff0c;wire 和 reg 是两种不同的数据类型&#xff0c;用于表示信号或变量。它们在 Verilog 中的使用场景和行为有一些区别&#xff1a; ### wire&#xff1a; - wire 类型用于连接组合逻辑电路中的信号&#xff0c;表示电路中的连线或信号传输线。 - wire …