JAVA 静态变量,静态方法,main方法详解(韩顺平)
目录
一.类变量
1.类变量的引入
2.类变量的定义
3.类变量的特点
4.如何定义类变量
5.如何访问类变量
6.类变量使用细节
二.类方法
1.基本介绍
2.定义类方法
3.类方法的访问
4.类方法的使用场景
5.类方法使用细节
三.main方法
1.深入理解main方法
2.特别提醒
一.类变量
1.类变量的引入
问题描述:设计一个 int count 表示总人数,我们在创建一个小孩时,就把 count 加 1
代码如下
class Child { //类private String name;public void join() {System.out.println(name + " 加入了游戏..");}
}//定义一个变量 count, 统计有多少小孩加入了游戏int count = 0;Child child1 = new Child("白骨精");child1.join();count++;Child child2 = new Child("狐狸精");child2.join();count++;Child child3 = new Child("老鼠精");child3.join();count++;
我们用传统的方法可以很轻易的写出这串代码,但是这串代码的缺点是count是一个独立的变量,并没有使用到oop,所以我们在这里引入类变量(静态变量)
对上述代码进行修改
class Child { //类private String name;//定义一个变量 count ,是一个类变量(静态变量) static 静态//该变量最大的特点就是会被Child 类的所有的对象实例共享public static int count = 0;public Child(String name) {this.name = name;}public void join() {System.out.println(name + " 加入了游戏..");}
}int count = 0;Child child1 = new Child("白骨精");child1.join();child1.count++;Child child2 = new Child("狐狸精");child2.join();child2.count++;Child child3 = new Child("老鼠精");child3.join();child3.count++;//类变量,可以通过类名来访问System.out.println("共有" + Child.count + " 小孩加入了游戏...");
2.类变量的定义
类变量也叫静态变量,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取得的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量
3.类变量的特点
1)static变量时同一个类所有对象共享(重点理解)
2)static类变量在类加载的时候生成了
4.如何定义类变量
定义语法:
访问修饰符 static 数据类型 变量名;(推荐)
static 访问修饰符 数据类型 变量名;
5.如何访问类变量
类名.类变量名 或者 对象名.类变量名
注意:静态变量的访问修饰符的访问权限和范围和普通属性一致
6.类变量使用细节
1)什么时候使用类变量
当我们需要让某个类的所有对象都共享一个变量时,
就可以考虑使用类变量。比如定义学生类,统计所有学生共交多少钱:Student(name , static fee)
2)类变量和实例变量区别
类变量是该类的所有对象共享的,而实例变量是每个对象独享的
3)实例变量不能通过 类名.类变量名 方式访问
4)类变量是在类加载时就初始化,也就是说,即使你没有创建对象,只要类加载了,就可以使用类变量
5)类变量的生命周期是随类的加载开始 ,随着类消亡而销毁
代码案例,帮助大家理解类变量使用细节
public static void main(String[] args) {B b = new B();//System.out.println(B.n1);System.out.println(B.n2);//静态变量是类加载的时候,就创建了,所以我们没有创建对象实例//也可以通过类名.类变量名来访问System.out.println(C.address);}class B {public int n1 = 100;public static int n2 = 200;
}class C {public static String address = "北京";
}
二.类方法
1.基本介绍
类方法也叫静态方法
2.定义类方法
访问修饰符 static 数据返回类型 方法名(){}【推荐】
static 访问修饰符 数据返回类型 方法名(){}
3.类方法的访问
类名.类方法名 或者 对象名.类方法名(前提:满足访问修饰符的访问权限和普通方法一致)
public class StaticMethod {public static void main(String[] args) {//创建2个学生对象,收学费Stu tom = new Stu("tom");//tom.payFee(100);Stu.payFee(100);Stu mary = new Stu("mary");//mary.payFee(200);Stu.payFee(200);//两种方法均可//输出当前收到的总学费Stu.showFee();//300System.out.println(MyTools.calSum(10, 30));}
}
//开发自己的工具类时,可以将方法做成静态的,方便调用
class MyTools {//求出两个数的和public static double calSum(double n1, double n2) {return n1 + n2;}//可以写出很多这样的工具方法...
}
class Stu {private String name;//定义一个静态变量,来累积学生的学费private static double fee = 0;public Stu(String name) {this.name = name;}//说明//1. 当方法使用了static修饰后,该方法就是静态方法//2. 静态方法就可以访问静态属性/变量public static void payFee(double fee) {Stu.fee += fee;//累积到}public static void showFee() {System.out.println("总学费有:" + Stu.fee);}
}
4.类方法的使用场景
当方法中不涉及到任何和对象相关的成员,则可以将方法设计为静态方法,提供开发效率
这里大家可以看我写的房屋出租系统中调用的Utility工具类,该类中大部分方法都是静态方法
将方法设计为静态方法,这样我们不需要创建对象就可以使用,比如
//如果我们希望不创建实例,也可以调用某个方法(即当做工具来使用)//这时,把方法做成静态方法时非常合适System.out.println("9开平方的结果是=" + Math.sqrt(9));
5.类方法使用细节
1)类方法和 普通方法都是随着类的加载而加载,将结构信息存储在方法区
类方法不能出现this,super
普通方法中隐含着this参数,也可出现super
2)普通方法必须由对象调用
3)类方法只能访问静态变量或静态方法(重点理解)
4)普通成员方法,既可以访问 非静态成员,也可以 访问静态成员
class D {private int n1 = 100;private static int n2 = 200;public void say() {//非静态方法,普通方法}public static void hi() {//静态方法,类方法//类方法中不允许使用和对象有关的关键字,//比如this和super。普通方法(成员方法)可以。//System.out.println(this.n1);}//类方法(静态方法)中 只能访问 静态变量 或静态方法//静态方法只能访问静态成员(重点)public static void hello() {System.out.println(n2);System.out.println(D.n2);//System.out.println(this.n2);不能使用hi();//OK//say();//错误}//普通成员方法,既可以访问 非静态成员,也可以访问静态成员//非静态方法可以访问 静态成员和非静态成员public void ok() {//非静态成员System.out.println(n1);say();//静态成员System.out.println(n2);hello();}
}D.hi();//ok//非静态方法,不能通过类名调用//D.say();, 错误,需要先创建对象,再调用new D().say();//可以
三.main方法
1.深入理解main方法
1)main方法是虚拟机的调用
2)java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public
3)java虚拟机在执行main()方法时不必创建对象,所以该方法必须时static
4)该方法接受Stri类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数
5)java 执行的程序 参数1 参数 2 参数 3
在DOS系统中可以看到调用的参数
在idea中
点击光标 在Program argumens中添加参数
2.特别提醒
1)在main()方法中,我们可以直接调用main方法所在类的静态方法或静态属性
2)但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象象去访问类中的非静态成员
JAVA 静态变量,静态方法,main方法详解(韩顺平)相关推荐
- python定义静态变量_对Pyhon实现静态变量全局变量的方法详解
python不能像C++一样直接定义一个static变量或者通过extern来导入别的库的变量而实现数据共享,但是python的思想是通过模块化来解决这个问题,就是通过模块来实现全局变量. 首先新建一 ...
- PHP中的static静态变量的使用方法详解
php中的变量作用范围的另一个重要特性就是静态变量(static 变量).静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果. <?php ...
- Java中的main()方法详解
源文作者:leizhimin 源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...
- java中main是什么_Java中的main()方法详解
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...
- JavaSE——面向对象进阶(封装、this、static、代码块、包、权限修饰符、main方法详解)
第2节 面向对象进阶 一.封装与private 概述: 封装的意义在于保护或者防止代码(数据)被我们无意中破坏.保护成员属性,不让类以外的程序直接访问和修改. 封装原则: 隐藏对象的属性和实现细节,仅 ...
- Java 静态变量,静态方法,静态常量(java static 关键字)
Java 静态变量,静态方法,静态常量 就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- python中的class怎么用_对python 中class与变量的使用方法详解
python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...
- python中class变量_对python 中class与变量的使用方法详解
python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...
- 好程序员Java学习路线分享finalize()方法详解
好程序员Java学习路线分享finalize()方法详解,前言,finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法.. fi ...
最新文章
- 如何配置jdk环境变量
- 计算机实测物理实验报告,計算机实测物理系数实验论文.doc
- 智慧城市顶层设计方法_主頁
- python几种排序_python各种排序算法
- 位操作——整数用位存储
- 【Tools】虚拟串口工具之VSPD10
- 10个顶级的CSS3代码生成器
- sqlite3_exec
- 剑指Offer——面试题30:最小的K个数
- Pytorch torch.topk()的简单用法
- 哈工大中文分词系统ltp4j使用总结
- github 仓库中文名_Github仓库重命名
- JanusGraph 创建索引步骤
- 3.PS 缩小放大、移动、选区工具
- CSU 1725 加尔鲁什·地狱咆哮对阵虚灵大盗拉法姆
- 在线一键重装Win11系统步骤
- 编程珠玑番外篇之番外篇-O 中间语言和虚拟机漫谈(ZZ)
- Java开发Mye_Java使用MyEclipse构建webService简单案例
- unity3D游戏开发十之粒子系统
- [附源码]java毕业设计校园二手交易平台的设计
热门文章
- 阿里云数字化转型方案再升级,移动研发平台EMAS助力海底捞超级App“云上捞”...
- 供应商配车/采购员配车车辆进厂~下发物流~库房接收~卸料确认
- 树莓派安装Ubuntu Mate解决无法连接WiFi问题,并部署Ros系统
- 如何看待honor荣耀时隔两月再次发布新品
- 各类数据库排名汇总(转载)
- 身体血液循环不好的人,会有些什么症状?你中招了吗
- matlab鱼眼镜头矫正
- python中字符串怎么引用_Python:字符串中引用外部变量的3种方法
- 简单工厂模式实现-电视机工厂案例
- 微信小程序 购物车操作