首页 > 编程语言 >黑马Java零基础视频教程精华部分_9_面向对象进阶(1)

黑马Java零基础视频教程精华部分_9_面向对象进阶(1)

时间:2024-07-29 23:54:40浏览次数:11  
标签:静态方法 进阶 静态 对象 static Student Java 视频教程 变量

系列文章目录


文章目录


一、static(表示静态) 是Java中的一个修饰符,可以修饰成员方法,成员变量

1、静态变量

被static修饰的成员变量,叫做静态变量
如果我们定义的同一个班级的Student中如果有一个属性为老师姓名,所有同学的这个属性因为都是一个班的同学所以相同,那么我们不必在新建对象时候一个个赋值,可以使用静态变量的方式。

public class Student {
    //属性:姓名 年龄 性别
    //新增:老师的姓名
    private String name;
    private int age;
    private String gender;
    public static String teacherName;
}

特点:被该类的所有对象共享。不属于对象,属于类。随着类的加载而加载,优先于对象存在。
调用方式:(1)类名调用(推荐) (2)对象名调用

2、静态变量底层原理

在这里插入图片描述

  1. 程序刚启动时,首先main方法入栈。
  2. 在main的第一行代码中用类名Student调用了静态变量teacherName,这是就用到了Student这个类,这时候就会把Student类的字节码文件加载到方法区,并在内存当中创建了一个单独存放静态变量的空间—静态区,这时候teacherName的默认值为NULL。注意此时内存中没有对象,所以静态变量优先于对象而出现,其他用static修饰的东西也有这个特性。然后给teacherName赋值“阿玮老师”。
  3. 之后第二行代码有new Student(),即可创建一个Student对象放入内存中,之后student对象需要teacherName时,从静态区中读取即可。

3、static静态方法

被static修饰的成员方法,叫做静态方法
特点:

  1. 多用在测试类和工具类中
  2. Javabean类中很少会用

调用方式:

  1. 类名调用(推荐)
  2. 对象名调用

4、工具类、测试类、Javabean类

Javabean类:用来描述一类事物的类。比如,Student,Teacher,Dog,Cat等。
测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口。
工具类:不是用来描述一类事物的,而是帮我们做一些事情的类。特点:类名见名知意,私有化构造方法(构造方法一旦私有,那么外界不能创建这个类的对象),方法都定义为静态的(方便调用)。

5、static注意事项

  1. 静态方法只能访问静态变量和静态方法
  2. 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  3. 静态方法中是没有this关键字

从代码层面

理解1和3:在一般的一个类中的普通成员函数,其实自带一个参数就是调用者的地址值,如下图所示,s1.show1()在执行时,就自动将s1的地址传入了函数show1中,然后show1如果要输出属性,就可以知道输出的是s1的属性,而再调用show2时候,默认还是show1参数的那个地址来调用show2(下图可以省略show2前面的this,一般这个this是隐含的)。
在这里插入图片描述
而静态方法的参数中,没有自带那个this参数,我们也不能自己设置,所以静态方法中使用this是不可以的,计算机不知道this指的是谁。
理解2:为什么非静态方法(里面带着对象的地址)可以访问所有呢,因为静态方法除了用类名可以访问,也可以用对象(也就是对象地址)来访问。

从内存层面

理解为什么静态方法只能访问静态变量和静态方法,即不能访问非静态是为什么?
首先不能访问非静态变量是因为,静态方法会比非静态变量先进入内存,那内存中还没有静态方法需要的变量时,显然无法调用,会出现错误。不能访问非静态方法,是因为静态方法中没有对象地址,那么显而易见不知道访问的是哪个对象的方法,会出现错误。
在这里插入图片描述

6、重新认识main方法

在这里插入图片描述
最后一条中:我们可以在IDEA中通过设置程序实参来体会,如下两图所示。
在这里插入图片描述在这里插入图片描述

标签:静态方法,进阶,静态,对象,static,Student,Java,视频教程,变量
From: https://blog.csdn.net/buyaotutou/article/details/140762064

相关文章

  • [Java基础]String 为什么是不可变的?
    关于这个问题,网上有人说,是因为String类被写成final或者String中的成员变量value数组被写成final,但其实并不是,下面做一个实验publicfinalclassMyString{publicfinalchar[]value={'z'};}首先我们定义了一个类Mystring,并且类和成员变量都被设置成finalpublicclas......
  • Java编写:给 20 块钱买可乐,每瓶可乐 3 块钱,喝完之后退瓶子可以换回 1 块钱, 问最多可以
    代码如下:注意while和count一般连用,如果是i只会循环执行一次!importjava.util.Scanner;publicclasstest16{publicstaticvoidmain(String[]args){//给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐//......
  • JavaEE 初阶(11)——多线程9之“阻塞队列”
    目录一.什么是“阻塞队列”二.生产者消费者模型2.1概念2.2 组件 2.3实际应用2.4优点 a.实现“解耦合” b.流量控制——“削峰填谷”2.5代价a. 更多的机器b.通信时间延长三.阻塞队列的实现 3.1简述  3.2ArrayBlockingQueue的使用3.3实现MyA......
  • 编写java程序,自动监控程度,dump内存文件
    步骤1:编写Java程序首先,编写一个Java程序,当内存使用达到11GB时生成heapdump文件,并以日期命名。将以下代码保存为MemoryMonitor.java文件:importcom.sun.management.HotSpotDiagnosticMXBean;importjavax.management.MBeanServer;importjava.lang.managemen......
  • 2024年华为OD机试真题-找出作弊的人-(C++/Java/python)-OD统一考试(C卷D卷)
    2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】  题目描述公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。过滤的规则为:找到分差最小的员工ID对(p1,p2)列表,......
  • 【Java】韩顺平Java学习笔记 第19章 IO流
    文章目录文件概述常用的文件操作创建文件获取文件信息目录的操作和文件删除流的分类各抽象类常用子类对象FileInputStreamFileOutputStreamFileReaderFileWriter节点流和处理流概念BufferedReaderBufferedWriterBufferedInputStream&BufferedOutputStream对象流:Obje......
  • html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化
    html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化。原来的代码如下:<divclass="cardcardcol-sm-6col-md-4col-xl-2col-lg-2justify-content-centerbg-secondary-subtle"id="tools-trigger"><ahref="javascript:vo......
  • java基础知识汇总(一)
    PART1:Java基础知识概述与Java的下载安装1)Java语言概述:①Java的发展史:詹姆斯·高斯林(JamesGosling)1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年获得了美国卡内基梅隆大学计算机科学博士学位,毕业后到IBM工作,设计IBM第一代工作站NeWS系统,但不受重视。后来转至S......
  • Java 关键字、标识符、注释、常量
    关键字:被Java语言赋予特殊含义的单词,一般是使用小写字母构成。如何区分关键字?idea对关键字具有高亮的效果。但goto和const作为保留字存在。标识符:给类、接口、方法、变量等起名字时使用的字符序列起名字时的规则:1、英文大小写字母2、数字字符3、$和_起名字时的规范:1......
  • JAVA毕业设计|springboot房屋租赁系统包含文档代码讲解
     收藏点赞不迷路 关注作者有好处文末获取源码一、系统展示二、万字文档展示开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven 编号:springboot008一、系统展示二、万字文档展示第5章系统详细设计5.1管理员功能模......