首页 > 编程语言 >Java学习笔记01-static关键字

Java学习笔记01-static关键字

时间:2024-12-31 10:29:37浏览次数:3  
标签:01 Java System static println 静态方法 public out

static静态,可以修饰成员变量、成员方法

## 一、static修饰成员变量

1、静态变量(类变量):有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享

2、实例变量(对象的变量):无static修饰,属于每个对象,每个对象的实例变量各不相同

package org.example.staticfield;

public class Student {
    //静态变量,有static修饰,属于类,只加载一份,可以被类和类的全部对象共享访问
    static String name;
    //实例变量,没有static修饰,属于对象,每个对象都有一份
    int age;
}
package org.example.staticfield;

public class Test {
    public static void main(String[] args) {
        //1、类名.静态变量(推荐)
        Student.name = "袁华";
        System.out.println(Student.name);

        //2、对象名.静态变量(不推荐)
        Student s1 = new Student();
        s1.name="马冬梅";
        s1.age = 18;
        System.out.println(s1.name);
        System.out.println(s1.age);

        Student s2 = new Student();
        s2.name="秋雅";
        s2.age = 19;
        System.out.println(s2.name);
        System.out.println(s2.age);

        System.out.println(Student.name);
    }
}

在以上案例中,name是静态变量,属于类,所有对象可以共享,但只有一份,因此最后程序执行结果是静态变量name的值被修改为秋雅。静态变量的运行原理如下图:

 3、静态变量的应用场景:

如果某个数据只需要一份,且希望能被共享、访问、修改,则使用静态变量。

例如:要记住创建了多少类的对象。

package org.example.staticfield;

public class User {
    static int count = 0;

    //使用构造器(创建对象时自动执行),可以用来记录一共有多少个此类的对象
    public User() {
        count++;
    }
}
package org.example.staticfield;

public class Test2 {
    public static void main(String[] args) {
        new User();
        new User();
        new User();
        new User();
        new User();
        System.out.println("User类一共创建了"+User.count+"个对象");
    }
}

 运行结果如下:

二、static修饰方法

1、静态方法(类方法):有static修饰,属于类,可以直接用类名访问,也可以用对象访问

2、实例方法(对象的方法):无static修饰,属于对象,只能用对象名访问

package org.example.staticmethod;

public class Student {
    private double score;

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
    // 静态方法:有static修饰,为类所持有
    public static void printHelloworld() {
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        //System.out.println(score);// 报错,静态方法中不能直接访问成员变量
    }
    //实例方法:没有static修饰,为对象所持有
    public void socrePass(){
        if (this.score >= 60){
            System.out.println("通过");
        }else {
            System.out.println("未通过");
        }
    }
}
package org.example.staticmethod;

public class Test {

    public static void main(String[] args) {
        //1、类名.静态方法(推荐)
        Student.printHelloworld();

        System.out.println("----------------");

        //2、对象名.静态方法(不推荐)
        Student s = new Student();
        s.printHelloworld();

        System.out.println("----------------");

        //3、对象名.实例方法
        s.setScore(55);
        s.socrePass();
    }
}

主方法中,可以直接用类名.静态方法来访问静态方法,而不需要创建类的对象来调用方法,因此静态方法用作设计某些功能,方便直接使用。

3、静态方法的应用场景

做工具类:工具类中都是一些静态方法,每个方法用来完成一个功能,以便供给开发人员直接使用。工具类中使用静态方法比较方便,直接用类名调用即可。

注意:工具类没有创建对象的必要,建议将工具类的构造器私有,就不能创建工具类的对象了。

以开发一个验证码程序为例:

package org.example.staticmethod;

public class VerifyCodeUtil {
    private VerifyCodeUtil() {}
    public static String generateVerifyCode(int length) {
        //1、定义一个变量,接收验证码
        String verifyCode = "";
        //2、写一个循环,循环次数为指定位数
        for (int i = 0; i < length; i++) {
            //i是3,0,1,2,3
            //定义一个随机数,为当前位置指定数字或者大写字母或者小写字母,数字是1,小写字母是2,大写字母是3
            int random = (int) (Math.random() * 3 + 1);//1,2,3
            switch (random) {
                case 1:
                    //当随机数为1时,当前位置是数字
                    verifyCode += (int) (Math.random() * 10);
                    break;
                case 2:
                    //当随机数为2时,当前位置是小写字母
                    verifyCode += (char) (Math.random() * 26 + 'a');
                    break;
                case 3:
                    //当随机数为3时,当前位置是大写字母
                    verifyCode += (char) (Math.random() * 26 + 'A');
                    break;
            }
        }
        return verifyCode;
    }
}

这是一个验证码工具类,可以直接用

package org.example.staticmethod;

public class Test2 {
    public static void main(String[] args) {

        System.out.println(VerifyCodeUtil.generateVerifyCode(4));

    }
}

来访问,可以提高代码的复用性,不重复书写验证码程序。

4、static关键字的一些注意事项:

package org.example.staticmethod;

public class Test3 {
    //静态变量
    public static int count =100;
    //静态方法
    public static void printHelloWorld()
    {
        System.out.println("hello world");
    }
    //实例变量:属于对象的
    public String name;
    //实例方法
    public void run(){

    }
    public static void main(String[] args) {
        //目的:搞清楚静态方法、实例方法访问的几点注意事项
    }
    //1、静态方法可以直接访问静态成员,不可以直接访问实例成员
    public static void print(){
        System.out.println(count);
        printHelloWorld();
        //System.out.println(name);//报错,静态方法不能直接访问实例成员
        Test3 t = new Test3();
        System.out.println(t.name);//静态方法可以间接访问实例成员
        //run();//报错
        //System.out.println(this);//报错。this代表的是对象
    }
    //2、实例方法既可以直接访问静态成员,也可以直接访问实例成员
    public void print2(){
        System.out.println(count);
        printHelloWorld();
        System.out.println(name);
        run();
        System.out.println(this);
    }
    //3、实例方法中国可以出现this关键字,静态方法中不可以出现this关键字
}

标签:01,Java,System,static,println,静态方法,public,out
From: https://blog.csdn.net/ddshs/article/details/144834828

相关文章

  • Java学习笔记02-电影信息展示综合案例
    需求:展示电影的全部信息,包括id、名称、价格、主演。要求展示出全部信息,并且用户可以根据电影id号查询某个电影的详细息实施步骤:1、设计电影类Movie,以便创建电影对象,封装电影数据packageorg.example.Demo;//实体类publicclassMovie{privateintid;private......
  • Java求S=1+1/2+2/3+3/5+5/8……前n项的和,n要求能任意输入。
    求S=1+1/2+2/3+3/5+5/8……前n项的和,n要求能任意输入。关系如下:后一项的分子=前一项的分母后一项的分母前一项的分子+前一项的分母Scannerscanner=newScanner(System.in);​​//获取用户输入的项数n    System.out.print("请输入项数n:");   ......
  • 【Java并发编程线程池】 ForkJoinPool 线程池是什么 怎么工作的 和传统的ThreadPoolEx
    Java中的ForkJoinPool线程池是什么怎么工作的Java中的ForkJoinPool线程池是什么怎么工作的相比较于传统的线程池,ForkJoinPool线程池更适合处理大量的计算密集型任务,它的核心思想是将一个大任务拆分成多个小任务,然后将这些小任务分配给多个线程去执行,最后将这些小任务的......
  • Django Admin 中实现动态表单:无 JavaScript 解决方案
    引言在开发Web应用时,我们经常需要创建动态表单,即根据用户的输入动态更新其他字段的选项。通常,这种功能会使用JavaScript来实现。但是,在某些情况下,我们可能希望避免使用客户端脚本,而完全依赖服务器端逻辑。本文将介绍如何在DjangoAdmin中实现这样的动态表单,而无需使......
  • 《Java核心技术 I》容易忽视和重要的知识点汇总
    本文对《Java核心技术I》中开发者容易忽视和重要的知识点进行总结,不包含一般开发者都知道内容。大标题后括号的数字代表书中对应的章节。一、Java的基本程序设计结构(3)1.整数表示可以为数字字面量加上下划线,这些下划线只是为了让人更易读。Java编译器会去除这些下划线。intn......
  • Java Web学生自习管理系统
    一、项目背景与需求分析随着网络技术的不断发展和学校规模的扩大,学生自习管理系统的需求日益增加。传统的自习管理方式存在效率低下、资源浪费等问题,因此,开发一个智能化的学生自习管理系统显得尤为重要。该系统旨在提高自习室的利用率和管理效率,为学生提供方便快捷的自习预约服务......
  • Java 项目、模块、包
    1.IntelliJIDEA项目结构工程是顶级结构单元,在一个工程下可以创建多个模块,不同模块之间存在依赖关系,一个模块可以创建多个包,一个包可以创建多个类project(工程)-->module(模块)-->package(包)-->class(类)1.1创建项目File-->New-->Project,创建一个名为Java_Proj......
  • Java难绷知识04——异常处理中的finally块
    Java难绷知识04——异常处理中的finally块前情提要:该文章是个人花的时间最长,查询资料最多,可能是有关finally块的最长文章,希望大家能看下去一些前言在Java中,异常处理机制是程序设计中至关重要的一部分。它允许程序员在程序运行时捕获并处理错误,防止程序因为异常情况而突然崩溃。......
  • 基于Java的网络音乐系统的设计与实现
             摘 要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对音乐信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用网络音乐系......
  • 【Java编程】JDBC 底层原理
    概述JDBC(JavaDataBaseConnectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。JDBC由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,注意:本文中的代码都是针对MySQL数据库实现的。先看一个案例:publicclassJdbcDemo{......