零基础Java第十二期:类和对象(三)

目录

一、static成员(补)

1.1. static修饰成员方法

1.2. static成员变量初始化

二、代码块 

2.1. 静态代码块和实例代码块

​三、对象的打印

一、static成员(补)

1.1. static修饰成员方法

public class Linear {
    public static int count = 100;
    public int func(){
        Linear lin1 = new Linear();
        Linear lin2 = new Linear();
        Linear lin3 = new Linear();

        lin1.count++;
        lin2.count++;
        lin3.count++;
        Linear.count++;

        return count;
    }
}
public class Main {
    public static void main(String[] args) {
        Linear num = new Linear();
        System.out.println(num.func());
    }
}

     老铁们猜一下打印的count是多少?这段代码具有迷惑性,老铁们可能猜会是101,而实际结果确实104。count因为被static修饰,就不属于对象了,所以count都是以同一个变量进行运算。class前的public是包访问权限,这个对象只能在同一个包中进行实例化访问。

       而下面,博主将带大家进行更加直观的感受(接下来的代码可能会震碎你的三观):按常理推断我们给num赋值了一个null,按理说应该会抛出异常。可是我们一运行,照样会打印。这就是因为ret被static修饰,从而不属于任何对象。

public class demo {
    public static String ret = "bite";
}
public class Main {
    public static void main(String[] args) {
        demo num = null;
        System.out.println(num.ret);
    }
}

 

1.2. static成员变量初始化

第一种是就地初始化,在定义时直接给出初始值。

public class Student{
    private String name;
    private String gender;
    private int  age;
    private double score;
    private static String classRoom = "107";  
 }

 另一种是静态代码块初始化,接下来会讲到。

二、代码块 

2.1. 静态代码块和实例代码块

以下是静态代码块与实例代码块的语法规则: 

//静态代码块
    static{
    System.out.println("静态代码块被执行了");
}
//实例代码块
{
    System.out.println("实例代码块被执行了");
}
package demo;

class Student{
    private String name;
    private int age;

    private static String ClassRoom;
//实例代码块
{
    System.out.println("实例代码块被执行了");
}
//静态代码块
    static{
    System.out.println("静态代码块被执行了");
}

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("构造Student(String name, int age)方法被执行了。。。");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public class StarWars {
    public static void main(String[] args) {
        Student stu = new Student("Sandman",16);
    }
}

以下为执行的结果:

       从这里可以看到,执行的顺序是先执行静态代码块,再执行实例代码块,最后是构造方法。如果我们在new一个stu2的对象,再次执行,结果如下:静态代码块只被执行了一次。

 

如果我们在静态代码块里面,如果我们调用一个成员变量,则会产生报错。

三、对象的打印

Student stu1 = new Student("Sandman",16);
Student stu2 = new Student("Truck",18);

System.out.println(stu1);
System.out.println(stu2);

       打印的结果我们可以理解为地址,@的左边demo包底下的Student类,右边是地址。当我们stu1和stu2这两个引用变量接受参数时,它是怎么调用的呢?我们看下println的源码。 

public void println(Object x) {
   String s = String.valueOf(x);
   if (getClass() == PrintStream.class) {
         // need to apply String.valueOf again since first invocation
         // might return null
         writeln(String.valueOf(s));
      } else {
      synchronized (this) {
      print(s);
      newLine();
    }
  }
}

     当我们调用构造方法时,object类里的x会接收参数,接着传给valueOf里面;

//valueOf的源码

public static String valueOf(Object obj) {
     return (obj == null) ? "null" : obj.toString();
}

      如果obj不是一个null,则会执行后面的toString;

//toString的源码

public String toString() {
   return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

      最终返回并打印出的结果。

      如果我们把toString的源码拿到我们的程序里面,把返回值改成我们想要打印的:

public String toString() {
    return "Your name";
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三层交换技术,eNSP实验讲解

三层交换技术,eNSP实验讲解 一、简要介绍1、概念2、工作原理3、优点4、应用场景5、与路由器的区别 二、eNSP仿真实验1、步骤一:创建连接,明确参数。2、步骤二:设置PC1和PC2参数3、步骤三:配置交换机,通过命…

【Linux】掌握库的艺术:我的动静态库封装之旅

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 1.什么是库1.2 认识动静态库1.2.1 动态库1.2.2…

访问控制技术原理与应用

目录 访问控制概述实现访问控制目标访问控制参考模型常见访问控制模型访问控制模型-DAC自主访问控制访问控制模型-MAC强制访问控制访问控制模型-RBAC基于角色的访问控制访问控制模型-ABAC基于属性的访问控制 访问控制概述 访问控制是对资源对象的访问授权控制的方法以及运行机…

nginx配置转发到elk的kibana的服务器

服务器准备 在135服务器上安装nginx服务 编辑kibana服务器的配置文件 将端口改为监听自己 杀掉之前kibana进程 重新启动kibana服务 因为设置了监听自身,所以前台访问kibana页面报错 此时我们修改nginx配置文件,用grep命令反选不含#和空行的行 将其覆盖原…

【Android】View的事件分发机制

文章目录 分发顺序ActivityViewGroupView 协作方法整体流程注意 Activity事件分发ViewGroup事件分发View点击事件总结 分发顺序 Activity->ViewGroup->View Activity 分发事件:Activity 通过 dispatchTouchEvent 方法分发事件,首先尝试将事件传递…

湘潭市学生公交卡线上申领流程及一寸照片自拍方法

在湘潭市,学生公交卡的线上申领流程已经非常便捷,同时,为了满足学生公交卡申领时所需的一寸照片要求,本文将详细介绍整个申领流程以及如何使用手机自拍并制作线上申领学生公交卡所需的一寸照片电子版。 一、湘潭市学生公交卡线上申…

翻译工具体验分享:deepl翻译等10款神器对比

作为一位在外贸行业摸爬滚打多年的客服,我深知在与国际客户沟通时,准确、高效的翻译工具是多么的重要。今天,我就来和大家分享一下我使用过的几款翻译工具,一共是十款,大家可以先看看。 一、福昕在线翻译 传送门&…

Linux入门(2)

林纳斯托瓦兹 Linux之父 1. echo echo是向指定文件打印内容 ehco要打印的内容,不加任何操作就默认打印到显示器文件上。 知识点 在Linux下,一切皆文件。 打印到显示器,显示器也是文件。 2.重定向 >重定向操作,>指向的…

六 在WEB中应用MyBatis(使用MVC架构模式)

六、在WEB中应用MyBatis(使用MVC架构模式) 实现功能: 银行账户转账 使用技术: HTML Servlet MyBatis WEB应用的名称: bank 6.1 需求描述 6.2 数据库表的设计和准备数据 6.3 实现步骤 第一步:环境…

React + Vite + TypeScript + React router项目搭建教程

一、创建项目 运行项目 二、目录结构 项目目录: ├─node_modules //第三方依赖 ├─public //静态资源(不参与打包) └─src├─assets //静态资源├─components //组件├─config //配置├─http //请求方法封装├─layout //页面…

Java-I/O框架09:InputStreamReader、OutputStreamWriter使用

视频链接:16.24 转换流的使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p24 1.InputStreamReader使用 package com.yundait.Demo05;import java…

一键AI换衣-可图AI试衣

我们的真的实现了穿衣自由了吗?上传一张人物图片和衣服的图片,就能实现一键换衣。 这就是可图AI试衣项目 魔塔地址:https://www.modelscope.cn/studio ... lors-Virtual-Try-On 参考: 一键AI换衣-可图AI试衣 https://www.jinsh…

Linux的IP网路命令: 用于显示和操作网络接口(网络设备)的命令ip link详解

目录 一、概述 二、用法 1、基本语法 2、常用选项 3、常用参数 4、获取帮助 三、示例 1. 显示所有网络接口的信息 (1)命令 (2)输出示例 (3)实际操作 2. 启动网络接口 3. 停止网络接口 4. 更改…

程序员记笔记有没有必要?如何高效记笔记?

本文转载自:https://fangcaicoding.cn/article/57 大家好!我是方才,目前是8人后端研发团队的负责人,拥有6年后端经验&3年团队管理经验,截止目前面试过近200位候选人,主导过单表上10亿、累计上100亿数据…

lust变频器维修电梯变频器CDD34.014.W2.1LSPC1

LUST伺服在安装时须注意,不可有任何的铁屑、螺丝、导线等掉人驱动器内。在安装完成后应作基本的检测动作,如对地阻抗,和短路检测等。 所有的安装及使用事项需要符合安全规定,并且也需要符合当地的相关规定和灾害预防措施。DC BUS…

NFTScan Site:以蓝标认证与高级项目管理功能赋能 NFT 项目

自 NFTScan Site 上线以来,它迅速成为 NFT 市场中的一支重要力量,凭借对各类 NFT 集合、市场以及 NFTfi 项目的认证获得了广泛认可。这个平台帮助许多项目提升了曝光度和可见性,为它们在竞争激烈的 NFT 市场中创造了更大的成功机会。 在最新更…

深度学习在复杂系统中的应用

引言 复杂系统由多个相互作用的组成部分构成,这些部分之间的关系往往是非线性的,整体行为难以通过简单的线性组合来预测。这类系统广泛存在于生态学、气象学、经济学和社会科学等多个领域,具有动态演变、自组织、涌现现象以及多尺度与异质性…

Vue computed watch

computed watch watch current prev

批量提取当前文件夹内的文件名

在需要提取的文件夹内新建一个txt文件,输入: dir ./b>name.txt 然后将该txt文件的扩展名改为.bat 如图 双击即可提取当前文件夹文件名,并保存到name.txt内

Android OpenGL ES详解——模板Stencil

目录 一、概念 1、模板测试 2、模板缓冲 二、模板测试如何使用 1、开启和关闭模板测试 2、开启/禁止模板缓冲区写入 3、模板测试策略函数 4、更新模板缓冲 5、模板测试应用——物体轮廓 三、模板缓冲如何使用 1、创建模板缓冲 2、使用模板缓冲 3、模板缓冲应用——…