java学习之类方法

news2024/9/23 7:29:43

目录

一、基本介绍

二、类方法的调用

三、类方法的应用实例

代码

 内存分析

运行结果

四、类方法的经典使用场景

五、类方法使用细节

第一条

第二条

第三条

第四条

第五条

第六条

六、练习

第一题

考察点

分析

结果

 第二题

 代码

考察点

结果

 第三题


类方法

一、基本介绍

类方法也叫静态方法

形式如下:访问修饰符 static 数据返回类型 方法名()

static 访问修饰符 数据返回类型 方法名()

二、类方法的调用

1)类名.方法名

2)对象名.方法名

注意:满足访问修饰符权限和规则

三、类方法的应用实例

计算学生交的学费总额

代码

package com.hspedu.static_;

public class StaticMethod {
    public static void main(String[] args) {
    //创建2个学生对象,交学费
        Stu stu1 = new Stu("Tom");
        //stu1.payFee(2000);
        Stu.payFee(2000);//静态变量fee的值0——>2000

        Stu stu2 = new Stu("Jack");
        //stu2.payFee(3000);
        Stu.payFee(3000);//静态变量fee的值2000——>5000

        Stu.showFee();//输出fee,即5000
        
    }
}

class Stu{
    private String name;//普通成员
    //定义一个静态变量,来累积学生的学费
    private static double fee = 0;

    public Stu(String name) {
        this.name = name;
    }
    //当方法使用了static修饰后,该方法就是一个静态方法
    //静态方法可以访问静态属性/变量
    public static void payFee(double fee){
        //统计总学费,将传进来的参数相加,累积到静态变量中
        //Stu.fee = Stu.fee + fee;
        Stu.fee += fee;
        //静态方法只能访问静态属性,不能访问非静态属性
    }
    public static void showFee(){

        System.out.println("总学费有:" + Stu.fee);

    }
}

 内存分析

 

运行结果

四、类方法的经典使用场景

如果希望不创建实例,也可以调用某个方法(即当做工具来使用),这时,把方法做成静态方法非常合适,比如:Math类,Arrays类

package com.hspedu.static_;

public class StaticMethod {
    public static void main(String[] args) {
   
        //如果希望不创建实例,也可以调用某个方法(即当做工具来使用)
        //这时,把方法做成静态方法非常合适,比如:
        System.out.println(Math.sqrt(9));//开平方
        System.out.println(MyTools.calSum(3.4,7.8));
        System.out.println(MyTools.division(5,0));
    }
}
//开发自己的工具类时,可以将方法做成静态的,方便调用
class MyTools{
    //求和
    public static double calSum(double n1, double n2){
        return n1 + n2;
    }
    public static Double division(double n1, double n2){
        if(n2 == 0){
            return null;
        }
        return n1 / n2;
    }

}

五、类方法使用细节

第一条

类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区:

类方法中无this的参数

普通方法中隐含着this的参数

第二条

类方法可以通过类名调用,也可以通过对象名调用。

第三条

普通方法和对象有关,需要通过对象名调用(创建对象然后调用),比如对象名.方法名(参数),不能通过类名调用

第四条

4)类方法中不允许使用和对象有关的关键字,比如this和super。普通方法(成员方法)可以

第五条

类方法(静态方法)中 只能访问 静态变量或静态方法。

第六条

普通成员方法,既可以访问 非静态成员,也可以访问静态成员。

package com.hspedu.static_;

public class StaticMethodDetail {
    public static void main(String[] args) {
        //非静态方法只能通过对象名.方法名()访问
        D d = new D();
        d.say();
        //D.say();//错误

        d.hi();
        D.hi();
    }
}
class E {
    public int n2 = 20;

}
class D extends E{
    private int n1 = 10;
    private static int n3 = 30;
    public void say(){//非静态方法
        System.out.println(this.n1);
        System.out.println(super.n2);
    }
    public static void hi(){//静态方法
        //类方法中不能使用和对象相关的关键字,
        // 比如this和super
        //System.out.println(this.n1);
        //System.out.println(super.n2);

    }

    //静态方法只能访问静态成员
    public static void hello(){
        System.out.println(n3);
        System.out.println(D.n3);
        //System.out.println(this.n3);//错误,不能使用tihs和super
        //System.out.println(n1);//错误,不能访问非静态变量
        //say();//错误,不能访问非静态方法
        hi();
        D.hi();
    }
    //普通成员方法既能访问非静态成员,也能访问静态成员
    public void f1(){
        //非静态
        System.out.println(n1);
        say();

        //静态
        System.out.println(n3);
        hi();
        hello();
    }
}

总结:静态方法只能访问静态成员,非静态方法可以访问静态成员和非静态成员

六、练习

第一题

说出以下代码的输出结果

package com.hspedu.static_;

public class Test {
    static int count = 9;//类变量
    public void count() {
        System.out.println("count=" + (count++));
    }
    public static void main(String args[]) {
        new Test().count();
        new Test().count();
        System.out.println(Test.count);
    }
}

考察点

类变量是所在类的所有对象实例共享的,后++是先运算再自增

分析

 

结果

 第二题

 代码

package com.hspedu.static_;

public class TestPerson {
    public static void main(String[] args) {
        System.out.println("Number of total is " + Person.getTotalPerson());//0
        Person p1 = new Person();//创建新对象,调用构造器,total = 1; id = 1;
        System.out.println("Number of total is "+ Person.getTotalPerson());//1
    }
}
class Person {
    private int id;
    private static int total = 0;
    public static int getTotalPerson(){
        //id++;//静态方法不能访问非静态成员
        return total;
    }
    public Person() {//构造器
        total++;//total = 1;
        id = total;//id = 1;
    }
}

考察点

静态方法只能访问静态成员,非静态方法可以访问静态成员和非静态成员

结果

 第三题

 

package com.hspedu.static_;

public class TestPerson02 {
    public static void main(String[] args) {
        Person02.setTotalPerson(3);
        new Person02();
    }

}

class Person02 {

    private int id;
    private static int total = 0;

    public static void setTotalPerson(int total){
        this.total = total;
        Person02.total = total;
    }

    public Person02(){
        total++;
        id=total;
    }
}


考察点同题2

解答

package com.hspedu.static_;

public class TestPerson02 {
    public static void main(String[] args) {
        Person02.setTotalPerson(3);//调用类方法,类变量total=3
        new Person02();//创建对象,调用构造器,执行total++,total=4,id=4
        Person02.showTotal();

    }

}

class Person02 {

    private int id;
    private static int total = 0;

    public static void setTotalPerson(int total){
        //this.total = total;//静态方法中不能适用this和super等对象有关的关键字
        Person02.total = total;
    }

    public Person02(){
        total++;
        id=total;
    }
    //创建静态方法,输出静态变量total的值
    public static void showTotal(){
        System.out.println("total的值=" + total);
    }
}


运行结果

 

 

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

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

相关文章

LeetCode498. 对角线遍历

LeetCode刷题记录 文章目录📜题目描述💡解题思路⌨C代码📜题目描述 给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。 示例1 输入:mat [[1,2,3],[4,5,6],[…

VUE2使用浏览器缓存的方法

分两种:localStorage和sessionStorage,它两统称webStorage 注意点1:localStorage对象和sessionStorage对象都是window对象下的,且方法都是一样的,默认”window.”可以省略,添加可用setItem(K,V),查询可用ge…

数据库|scMethBank:单细胞全基因组 DNA 甲基化图谱数据库

甲基化是DNA的一种重要化学修饰,可调节基因的表达和关闭,与癌症、衰老、老年痴呆等许多疾病密切相关,是表观遗传学的重要研究内容之一。测序技术的发展,极大促进了单细胞DNA甲基化研究。然而大量数据的不断积累,对单细…

《HTTP权威指南》----HTTP报文

目录 报文流 报文的组成部分 报文语法 1.起始行 2.首部 通用首部,既可以出现在请求报文中也可以出现在响应报文中。 请求首部,提供更多有关请求的信息。 响应首部,提供更多有关响应的信息。 实体首部,描述主题的长度和内…

2022年,一个技术账号的年终独白,满篇都写着2个字:真难。

2022年,梦想橡皮擦这个账号经历了成长,突破,回归 2023年,适应改变 文章目录序2022年,梦想橡皮擦账号整体汇总原创博客KPI计划与完成总排名KPI计划与完成2022年,橡皮擦获得的荣誉2022年,做技术博…

日志收集系统架构

背景 应用服务器多,日志文件被分散在各个应用服务器上,需要依次登录每台设备才能查看日志,效率低下,且不利于服务器安全管控,加大生产服务器的风险;日志文件不统一,各项目日志没有统一的规范&a…

Python Django教程之实现天气应用程序

基本设置 将目录更改为天气 cd weather启动服务器 python manage.py runserver要检查服务器是否正在运行,请转到 Web 浏览器并输入为 URL。现在,您可以通过按以下命令停止服务器http://127.0.0.1:8000/ ctrl-c 实现 python manage.py startapp main…

Vehicle Speed Forecasting Based On GCN-LSTM Combined Model

GCN-LSTM模型预测道路交通车辆速度 Vehicle Speed Forecasting Based On GCN-LSTM Combined Model Summary This research offers a multistep traffic flow forecasting framework relying on interest spatial-temporal-graph neural network-long short-term memory neura…

【阅读】《MYSQL技术内幕:innodb》索引

概念 索引的类型 聚集索引:叶子节点包含行记录的全部数据辅助索引:叶子节点不包含行记录的全部数据,除了键值以外,还包含指向索引行的书签。 堆表和索引组织表 堆表 无论是主键索引还是普通索引都是辅助索引。数据是按照插入…

​力扣解法汇总2042. 检查句子中的数字是否递增

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔&…

微信小程序实战十五:Https服务搭建及Nginx配置

文章目录 1.最终效果预览2.后端jar包部署及启动3.前端管理系统部署4.Nginx的配置5.https证书申请6.小程序后台中配置子域名这篇文章重点介绍下微信小程序正式版上线前https服务的搭建及配置过程,之前整个流程都操作过,时隔一年再次从零开始操作有些地方的印象已经模糊了,好记…

Java Swing五子棋项目

一、项目简介 本项目为Java Swing五子棋项目,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse 确保可…

ArcGIS基础实验操作100例--实验50以栅格分区裁剪面要素

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验50 以栅格分区裁剪面要素 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

Vulkan PBR与IBL实践

对我来说,每天能过得心情舒畅,有酒喝有美味佳肴吃,必要时工作一会儿,晚上睡得舒舒服服,就行了。 ——迪希亚 序 说实话我已经记不清上一篇文章是什么时候的事情了,感觉得有好几个月了,但其实我…

【Linux】【信号】

文章目录一、信号是什么1.生活中的信号2.什么是Linux信号3.信号处理的常见方式4.Linux当中的信号二、信号的产生1.signal函数2.核心转储3.验证进程等待中的core dump标记位三、信号的系统调用接口1.kill2.raise3.abort四、由软件条件产生信号alarm五、硬件异常产生信号1.除零异…

从编译到可执行,eBPF 加速容器网络的原理分析 | 龙蜥技术

编者按:eBPF(extended Berkeley Packet Filter) 是一种可以在 Linux 内核中运行用户编写的程序,而不需要修改内核代码或加载内核模块的技术。简单说,eBPF 让 Linux 内核变得可编程化了。本文整理自龙蜥大讲堂第 57 期,浪潮信息 SE…

HTML防数据采集

什么是防采集 就是我们想利用爬虫工具采集某个网站的数据(前提当然是公开合法数据),但网站不想给你采集而设置的技术阻挡措施。 常见的防止采集方案 利用输入验证码框验证,在采集某些网站过程中,要求你输入验证码&a…

电源特性测试测试哪些方面?电源特性自动测试系统NSAT-8000介绍

假设电源适配器厂家对电源适配器进行了很合理的测试验证工作,那么电源适配器输出的电压应该是个稳定的电源输出。那么对于一些小型设备而言,电源测试就主要测试设备电源端的测试工作。下面纳米软件Namisoft小编将带大家一起看看,关于电源特性…

Android Jetpack Compose——一个简单的笔记APP

一个简单的笔记APP简述效果视频Hilt提供依赖对象Room CRUD接口实现类内容封装查询所有查询删除插入笔记内容效果图ViewModel依赖注入数据初始化数据处理View标题栏排序组件笔记列表新建&编辑笔记效果图ViewModel依赖注入初始化数据处理View背景颜色条标题保存笔记路由导航建…

动态规划 0-1背包问题(滚动数组思想优化)

目录 125 背包问题(二)LintCode 炼码 0-1背包滚动数组优化 0-1背包问题(一)LintCode 炼码 【解法一】二维数组 【解法二】滚动数组 125 背包问题(二)LintCode 炼码 class Solution { public:/*** para…