java学习(九)static和this使用

将一维数据(序列)转化为二维数据(图像)的方法汇总GAFS, MTF, Recurrence plot,STFT 虽然深度学习方法(1D CNN, RNN, LSTM 等)可以直接处理一维数据,但是当前的深度学习方法主要还是处理二维结构数据的,特别是在计算机视觉CV以及自然语言处理NLP领域,各种各样的方法层出不穷。因此,如果能够将一维序列数据转化为二维(图像)数据, 则可以直接结合CV以及NLP领域的方法,是不是很有趣! GAF, GASF, GADF, MTF, Recurrence Plot, STFT, 短时傅里叶变换 阅读详情

java学习(九)static和this使用

static:翻译为静态

  • 所有static关键词修饰的都是类相关的,不需要new对象,都是采用类名.的形式访问,不会出现空指针异常

  • static修饰的方法称为静态方法,static修饰的变量称为静态变量

复习变量(引出静态变量)

  • 方法体内声明的变量叫局部变量

  • 方法体外声明的变量叫成员变量

    • 成员变量可以分为静态变量和实例变量,在实例变量前加static关键词就是静态变量了

静态代码块

  • 静态代码块在类加载时执行,并且只执行一次。 静态代码块实际上是 java 语言为程序员准备的一个特殊的时刻,这个时刻就 是类加载时刻。静态代码块会在main方法之前执行。

静态代码块:

public class StaticTest01{
​
    //静态代码块
    static{
        System.out.println(111);  //先执行
    }
​
    public static void main(String[] args) 
    {
        System.out.println("main 执行!");  //最后执行
    }
​
    //静态代码块
    static{
        System.out.println(222);  //然后执行
    }
}
//静态代码块先执行,然后才是方法执行
  • 可以得知:静态代码块是在main方法之前执行的,是因为静态代码块在类加载时执行,并且只执行一次。

访问静态变量和实例变量

public class StaticTest02{
    
    //实例变量
    int i = 100;
​
    //静态变量
    static int j = 111;
    
    static{
    
        System.out.println(i);  //java:11: 错误: 无法从静态上下文中引用非静态 变量 i
​
        System.out.println(j);  //编译成功
    }
​
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}

静态属性

  • 当一个类的某个属性值不会随着对象的改变而变化的时候,建议将该属性定义为静态属性。

  • 静态变量在类加载的时候初始化,存储在方法区当中,不需要创建对象,直接通过类名访问

静态方法

  • 在实际的开发中,“工具类”当中的方法一般定义为静态方法,因为工具类就是为 了方便大家的使用,将方法定义为静态方法,比较方便调用,不需要创建对象,直接使用类名 就可以访问。

  • 当某个动作 在触发的时候需要对象的参与,这个方法应该定义为实例方法

java中的this是什么,内存中存储在哪里,要掌握 this 在实例方法和构造方法中的 用法。

  • this 可以看做一个变量,它是一个“引用”,存储在 Java 虚拟机堆内存的对象内部,this 这个“引用”保存了当前对象的内存地址指向自身,任何一个堆内存的 java 对象都有一个 this 。

  • this 指向“当前对象”,也可以说 this 代表“当前对象”,this 可以使用在实例方法中以及 构造方法中,语法格式分别为“this.”和“this(..)”。this 不能出现在带有 static 的方法当中。

public class ThisInStaticMethod{
​
    public static void main(String[] args) {
​
        ThisInStaticMethod.method();
    }
    public static void method(){
​
        System.out.println("method执行");
        System.out.println(this);  //java:11: 错误: 无法从静态上下文中引用非静态 变量 this
​
    }
}
​

得知:this不能出现在 static的方法当中,static 方法执行的过程中是不需要“当前对象”参与的,所以 static 的方法中不能使用 this,因为 this 代表的 就是“当前对象”。

this:this只能在实例方法中使用,谁调用这个实例方法,this就是谁,就是指当前对象!

public class Customer{
​
    private String name;
​
    //无参构造方法
    public Customer(){
    }
​
    //有参构造方法
    public Customer(String _name){
        name = _name;  //这里的name就是实例变量neme,_name是接收的局部变量
    }
    
    //set
    public void setName(String _name){
        name = _name;
    }
​
    //get
    public String getName(){
        return name;
    }
​
    //定义一个实例方法
    public void shopping(){
        System.out.println(this.name + "is shopping!");  //谁调用就打印谁
        System.out.println(name + "is shopping!");  //谁调用就打印谁
    }
}

调用:

public class CustomerThisTest{
​
    public static void main(String[] args) {
​
        CustomerThis jack = new CustomerThis("jack");
​
        jack.shopping();  
​
        System.out.println("分界线===============================");
​
        CustomerThis rose = new CustomerThis("rose");
​
        rose.shopping(); 
    }
}

得 知 :在实例方法中可以 直接访问当前对象的实例变量,而“this.”是可以省略的。

那么this在什么时候不能省略?

当接收的局部变量参数和实例变量相同的时候,例:name = name;需要写成this.name = name这里的this就不可以省略了哈哈哈哈。【否则name = name这两个name都会被识别成局部变量哦】

  • 访问实例变量,实例方法。上面Customer代码块修改:

    //定义一个实例方法
    public void shopping(){
    
        System.out.println(name + "is shopping!");  //谁调用就打印谁
        System.out.println(this.name + "is shopping!");  //谁调用就打印谁
​
        this.pay();
        
        //省略this
        pay();
    }
​
    //再定义一个实例方法
    public void pay(){
        System.out.println(name + "付钱付钱");
    }
}
            /*
            jackis shopping!
            jackis shopping!
            jack付钱付钱
            jack付钱付钱
            分界线===============================
            roseis shopping!
            roseis shopping!
            rose付钱付钱
            rose付钱付钱
            */

得出:在一个实例方法当中可以直接去访问其它的实例方法

代码

public class ThisTest {
​
    int i = 10;
​
    public static void main(String[] args) {
​
        //System.out.println(i);  //错误: 无法从静态上下文中引用非静态 变量 i。因为main方法有static,i是实例变量,要用引用.去访问
​
        //System.out.println(this.i); // 错误: 无法从静态上下文中引用非静态 变量 this。因为 main 方法带有 static,不能用 this(代表当前对象)
​
        ThisTest tt = new ThisTest();
​
        //通过引用访问
        System.out.println(tt.i);
    }
}

得知:

  • 在 static 的方法中不能直接访问实例变量,须先自己创建一个对象,通过“引用”可以去访问。

  • 在 static 的方法中不能通过 this 访问实例变量,因为在 static 方 法中是不能存在 this 的。

同理:

  • main 方法中无法直接调用实例方法 ,因为实例方法也必须要new对象,通过引用调用

this 使用在构造方法中,this(实际参数列表);调用另一个有参的构造方法

  • this();语法要在同一个类中使用

  • this();只能在构造方法第一行,前面不能有其他代码

public class ThisTest02{
    public static void main(String[] args){
​
        //调用无参构造
        Date d1 =  new Date();
        d1.detail();
        
        //调用有参构造
        Date d2 = new Date(2020,06,19);
        d2.detail();
    }
}
​
    
class Date{
    private int year;
​
    private int month;
​
    private int day;
​
​
​
    //业务要求,默认创建的日期为 1970 年 1 月 1 日
    //无参构造方法
    public Date(){
        /*
        this.year = 1970;
        this.month = 1;
        this.day = 1;
        */
        //System.out.println("随便写一行代码在this()前");  //错误: 对this的调用必须是构造器中的第一个语句
​
        //无参构造方法调用有参构造方法1行代码
        this(1970,1,1);  
    }
​
    //有参构造方法
    public Date(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
​
    //定义一个打印年龄的方法
    public void detail(){
        System.out.println(year + "年" + month +"月" + day + "日");
    }
​
    //set和get
    public void setYear(int year){
        this.year = year;
    }
    
    public int getYear(){
        return year;
    }
​
    public void setMonth(int month){
        this.month = month;
    }
​
    public int getMonth(){
        return month;
    }
​
    public void setDay(int day){
        this.day = day;
    }
    
    public int getDay(){
        return day;
    }
}

小总结:

  • 代码封装,属性一般都私有化

  • 都要有两个构造方法,一个无参构造,一个有参构造。(对象属性的 初始化)

  • 都要有对应的set和get方法,这是封装的规定,就算暂时用不到也要写。

  • 封装的get方法要指定返回值的类型,不需要传参。

  • 封装的set方法不需要返回值,所以返回值类型固定写法void,但是需要传参数。

  • 只要调用的方法a和被调用的方法b是在同一个类里面,this.和类名.可以省略

银行存取款代码:其实这3个类写入3个文件内比较好

public class TestCustomerAccount{
​
    public static void main(String[] args){
        
        Account a = new Account("10086",1000,0.0023);
​
        Customer c = new Customer("smth",a);
​
        //存100
        //取960
        //取200
​
        c.getAct().deposite(100);
        c.getAct().withdrow(960);
        c.getAct().withdrow(2000);
        
    }
}
​
//客户类
class Customer{
​
    private String name;
    
    private Account act;
​
​
    //构造方法
    public Customer(){
    
    }
    
    //有参构造
    public Customer(String name,Account act){
        
        this.name = name;
​
        this.act = act;
    }
    
​
    //set 和 get方法
​
    public void setName(String name){
    
        this.name = name;
    }
​
    public String getName(){
​
        return name;
    }
​
    public void setAct(Account act){
​
        this.act = act;
    }
​
    public Account getAct(){
        return act;
    }
}
​
//账号类
class Account{
    private String id;  
    private double balance;  //余额实例属性
    private double annualInterestRate;   //年利率实例属性
​
        
    //无参构造
    public Account(){
    
        
    }
    
    //有参构造,
    public Account(String id, double balance, double annualInterestRate){
​
        //构造方法是创建对象的时候,对象的属性初始化
        this.id = id;
        this.balance = balance;
        this.annualInterestRate = annualInterestRate;
    }
​
​
    //各属性set和get,这里是后期查询和修改需要
    //为啥每个类都写set和get方法,用不到也要写,因为这是“封装”的规定
    public String getId(){
        return id;
    }
​
    public void setId(String id){
        this.id = id;
    }
​
    public double getBalance(){
        return balance;
    }
​
    public void setBalance(double balance){
        this.balance = balance;
    }
​
    public double getAnnualInterestRate(){
        return annualInterestRate;
    }
​
    public void setAnnualInterestRate(double annualInterestRate){
        this.annualInterestRate = annualInterestRate;
    }
    
    
    //存钱方法
    //存钱要传一个参数告诉存多少钱
    
    public void deposite(double money){
    
        //this.balance += money;
        
        this.setBalance(this.getBalance() + money);
        System.out.println("存款成功" + money);
        
    }
​
​
    //取钱方法
    //取钱需要传一个参数告诉取多少钱
    public void withdrow(double money){
        if(money > this.getBalance()){
            System.out.println("余额不足,取款失败");
            return;
        }
        this.setBalance(this.getBalance() - money);
        System.out.println("取款成功"+ money);
    }
}
Python爬虫实战:深度解析携程/飞猪酒店评论API与大数据采集 本文详细介绍了如何通过Python爬虫技术获取携程和飞猪平台的酒店评论数据。我们涵盖了从API分析、反爬虫对策到数据存储和处理的完整流程。API逆向分析:通过浏览器开发者工具发现和分析API接口反爬虫对策:使用请求头随机化、IP代理、浏览器自动化等技术异步处理:使用asyncio提高爬取效率数据质量:实现数据清洗和质量检查机制系统架构:构建可扩展的分布式爬虫系统未来改进方向:机器学习识别验证码分布式爬虫架构实时数据流处理更智能的反反爬虫策略。 阅读详情

相关推荐

告别纸上谈兵:在Xilinx Artix-7 FPGA上实测RGMII接口,从ILA抓包到PC Ping通全流程记录

本文详细记录了在Xilinx Artix-7 FPGA平台上实现RGMII接口的全过程,包括硬件配置、Vivado工程设置、双沿数据转换代码实现以及ILA波形分析。通过实测数据包捕获和PC端Ping测试,验证了千兆以太网通信的稳定性和可靠性,为工业通信网关等应用提供了实用参考。

weixin_33701251的博客 287

SpringBoot 读取项目中静态资源文件

⏹SpringBoot 读取项目中静态资源文件

菜鸟记录 8085

逆向实战:Soul聊天协议加密与Frida绕过检测

本文详细解析了Soul聊天协议逆向分析的全过程,重点介绍了如何利用Frida绕过应用的反调试检测机制。通过静态分析定位关键SO库,并编写Frida脚本动态Hook线程创建函数,成功实现对抗。文章还进一步追踪了基于DES算法的加密流程,并探讨了协议数据结构的解析方法,为移动应用安全研究提供了实战参考。

2w3e4r5t6y的博客 1132

一个高级的EventManager(自认为)

一个泛用性极强的EventManager

ViYeye的博客 575

3DGS实战避坑指南:从零搭建到成功训练

本文详细介绍了3D Gaussian Splatting(3DGS)从环境配置到成功训练的实战避坑指南。涵盖git clone的正确使用、依赖安装的隐藏陷阱、CUDA版本兼容性解决方案、首次训练验证、常见报错急救方案、性能优化技巧及可视化调试方法,帮助开发者高效搭建和训练3DGS模型。

weixin_29053383的博客 365

【AI实战】用Coze工作流打造抖音视频文案提取神器——从单链接到批量处理的进阶指南

本文详细介绍了如何利用Coze工作流打造抖音视频文案提取工具,从单链接处理到批量提取的进阶指南。通过AI技术和工作流的结合,用户可以高效提取抖音视频的ASR和OCR文本,大幅提升内容创作效率。文章还涵盖了性能优化、异常处理及实际应用场景扩展,助力开发者快速实现抖音文案自动化提取。

weixin_29210759的博客 279

java中为什么在static中不能使用this关键字

Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。而this指代的是当前的对象 在方法中定义使用的this关键字,它的值是当前对象的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况. 而且,更为重要的是this和super都无法出现在static 修饰的

猫儿 8205

LPDDR5 物理层一致性测试(连载・下):电平、过冲下冲与 Rx 接收眼图 Mask 掩模完整指标解读

本文系统梳理LPDDR5物理层一致性测试全流程,涵盖差分/单端电平、边沿斜率、交叉点电压、过冲下冲及CS/CA/DQ接收眼图掩模(Rx Mask)测试,详解各参数定义与工程实操要点。强调配置需与DRAM MR寄存器同步,突出差分≠合格、面积积分不可忽视、掩模失败优先排查参考电压与信号完整性等高频坑点,为硬件调试与SI工程师提供权威参考。

一只豌豆象的博客 40

this和static

在定义不需要与其他文件共享的全局变量时,加上static关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用。this是一个变量,是一个关键字,是一个引用。所以,严格意义上来说,this代表的就是“当前对象”,this存储在堆内存当中对象的内部。静态方法中不能使用this,this代表当前对象通过谁调用的方法,谁就是当前对象。1. 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。1.this是一个关键字,是一个引用,是一个变量,保存内存地址指向自身。

m0_73784167的博客 1250

TRAE智能体开发:TRAE概述

TRAE(/treɪ/)深度融合 AI 能力,是一名能够理解需求、调用工具并独立完成各类开发任务的“AI 开发工程师”,帮助你高效推进每一个项目。

王国平的博客 1264

瑞芯微RK3588平台YOLOv8Pose模型RKNN部署与C++优化实战:从模型转换到高效推理的全流程指南-附源码

错误码 | 原因 | 解决方案 || -1001 | ONNX算子不支持 | 升级RKNN SDK至最新版 || -2003 | 量化校准数据不足 | 增加校准图片至500张 || -3005 | 输入尺寸不匹配 | 固定模型输入尺寸为640x640 || 资源消耗 | CPU 35% | NPU 90% |

m0_64661770的博客 989

this与static关键字的用法

一、this 1、this.属性名 一个方法当中的局部变量和成员变量名称相同,我们的程序需要在这个方法当中访问成员变量,这个时候就必须使用this关键字,用来区分成员变量和方法当中的参数。例如,set方法 private int age; public void setAge(int age) { this.age = age; } 2、this.方法名 让类中的一个方法来访问类中的另一个方法或者实例变量 public class Test { publ

dreaming9420的博客 1418

【PSINS工具箱】159联邦滤波器代码优化与注释、运行结果、文字性解释。15维状态量、9维观测量,联邦滤波与集中式滤波对比。完整代码可订阅后查看

基于工具箱的联邦滤波代码,15维状态量、9为观测量

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 485

九、Java类核心语法:构造器、this、封装与static详解

本文介绍了Java类的基础语法及核心概念,包括构造器、this关键字、封装、JavaBean和static关键字。首先讲解了类的定义结构,作为对象模板包含属性和方法。重点阐述了构造器的特点和使用,this关键字的三种用法,以及封装实现数据安全性的方法。详细说明了JavaBean的标准规范和static关键字修饰的静态成员特性。全文通过示例代码展示了各概念的实际应用,帮助理解面向对象编程的基本原理,为Java开发奠定基础。

jaysee-sjc的博客 2550

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java中this关键字和static关键字

文章目录1 this关键字1.1 this表示本类属性1.2 this调用本类方法1.2.1 this调用普通方法1.2.2 this调用构造方法1.2.3 this表示当前对象2 static关键字2.1 static属性(类属性)2.2 static方法(类方法) 1 this关键字 this关键字主要有三个方面的用途: this表示本类属性。 this表示本类方法。 this...

zhao_miao的博客 3037

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java关键字:this和static

在C语言中,我们经常会遇到指针,也常常被指针所困扰,毕竟它经常惹程序员头疼。那么在Java中我们便方便多了,只是因为有了this. 那么this到底能给我们带来多大的便利呢?接下来让我们一起康康。 static作为静态的单词,在Java中又有着怎样的妙用呢? 这里主要给大家讲解this的调用方法和注意事项以及static的妙用。 一、This调用方法 关于this,首先它是一个关键字,是不能当作变量名来使用的;在我们的...

java小白的博客 2105

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 为什么在static中不能使用this关键字

Static方法是类方法,先于任何的实例(对象)存在。 即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。 而this指代的是当前的对象 在方法中定义使用的this关键字,它的值是当前对象的引用。也就是说你只能用它来调用属于当前对象的方法,或者使用this处理方法中成员变量和局部变量重名的情况. 而且,更为重要的是this和super都无法出现在static修饰的方法中。...

木头人i 1518

Java static方法里为什么不能使用this关键字,和Super

Static方法是类方法,先于任何的实例(对象)存在。 即Static方法在类加载时就已经存在了(JAVA虚拟机初始化时),但是对象是在创建时才在内存中生成。 而this指代的是当前的对象。 static叫静态方法,也叫类方法。 即在程序启动的时候,就会为static方法分配一块内存空间,没有static的其他方法,非静态方法,必须在类实例化时,才有内存空间,所以在类实例化之前是无法调用的...

天才周的博客 3040

Java学习 -- this和static

函数的重载 (1)同名的函数通过不同的形参做类似的事情,这就叫函数的重载 (2)函数重载的要求: 1. 函数的形参个数 2. 函数的形参顺序 3. 函数的形参数据类型 这三个至少有一个是不一样的 (3)如果两个函数只是函数的返回值不一样,其他都一样,这构不成函数的重载,并且编译时会报错! int add(int a, int b) { return a + b; } double add(dou...

水里的鱼 298

static,this关键字

不在一个类调用如图下:

2501_91638000的博客 800

JAVA常见的关键字 final、this、super、static、abstract

1.Final关键字 2.This关键字 3.Super关键字 3.1 基本用法 3.1.1访问父类的成员变量 3.1.2调用父类的方法 3.1.3 调用父类的构造函数 3.2super关键字的深层理解 3.3 注意事项 4.Static关键字 4.1 作用范围 4.2 使用 4.2.1 修饰类的成员变量 4.2.2修饰类的成员方法 4.2.3 修饰代码块 4.2.4 修饰内部类 4.2.5 注意事项 5.abstract关键字 5.1 为什么要用? 5.2

2301_77358195的博客 983

JAVA this、static

代码解析:1).首先执行main方法,main方法入栈。2).执行Person p =new Person("张三",20),等号右边先执行,堆中开辟一块内存空间,数据全部为默认值,构造方法入栈,栈中没有默认值,后将数据赋值给栈中对应的变量,构造方法中的this指向正在堆中创建的对象,将堆中的数据进行修改。再执行构造方法中的System.out.println("构造方法....this=" + this),此时的this即为正在被创建的对象的地址。

2402_86604855的博客 784

理解Java中this和static的含义

理解Java中this和static的含义 佟强 http://blog.youkuaiyun.com/microtong//this:当前对象的引用 //在引用一个类的成员变量,this被编译器隐含传递过去 //this的用法 //返回当前对象的引用 //从一个构造函数中调用另外一个构造函数 //区分同名的成员变量和参数变量//静态变量:类变量,为此类所有对象共享 //静态方法:静态方法里没有thi

佟强 4556

Java的this、static关键字详解

文章目录this对象创建过程this的本质this的常见用法this的简单使用this() 调用重载构造方法static概述静态初始化块 this 对象创建过程 构造方法是创建 Java 对象的重要途径,通过 new 关键字调用构造器时,构造器也确实返回该类的对象,但这个对象并不是完全由构造器负责创建。创建一个对象分为如下四个步骤: 1.分配对象空间,并将对象成员变量初始化为0或空; 2.执行属性值的显式初始化; 3.执行构造方法; 4.返回对象的地址给相关的变量。 this的本质 this 的本质就是“创

bboy枫亭的博客 2249

理解Java中的 this 和 static 和 final 关键字

this关键字的作用 (1)this调用本类(当前对象)中的属性,也就是类中的成员变量; (2)this调用本类(当前对象)中的其他方法; (3)this调用本类(当前对象)中的其他构造方法,调用时要放在构造方法的首行。 Public Class Student { String name; //定义一个成员变量name private void SetName(String name) { //定义一个参数(局部变量)name this.name=name; //将局部变量的值传递给成员变量

树暖 441

JAVA基础学习——Day10(类的this和static)

JAVA基础学习——Day10(类的this和static)

LengchenAl的博客 865
上一篇: java学习(八)面向对象特征之封装和调用
下一篇: java学习(十)继承extends、方法覆盖、多态
python_nice
博客等级 码龄8年 46粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值