Java学习笔记十七:Java中static使用方法
Java中static使用方法
一:Java中的static使用之静态变量;
我们都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!!
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~
使用 static 可以修饰变量、方法和代码块。
我们先认识一下静态变量。
例如,我们在类中定义了一个 静态变量 hobby
代码如下所示:
- public class HelloWorld {
- //static修饰的变量为静态变量,所有的类的对象共享hobby
- static String hobby ="cnblogs";
- public static void main(String[]args){
- //静态变量可以直接使用类名来访问,无需创建类的对象
- System.out.println("通过类名访问hobby:"+HelloWorld.hobby);
- //创建类的对象
- HelloWorld hello = new HelloWorld();
- //使用对象名来访问静态变量
- System.out.println("通过对象名访问hobby:"+hello.hobby);
- //使用对象名的形式修改静态变量的值
- hello.hobby="博客园";
- //再次使用类名访问静态变量,值已被修改
- System.out.println("通过类名访问hobby:"+HelloWorld.hobby);
- }
- }
运行结果为:
注:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!
二:Java中的static使用之静态方法;
与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如:
- public class HelloWorld {
- //使用static关键字声明静态方法
- public static void print(){
- System.out.println("欢迎您:博客园!");
- }
- public static void main(String[]args){
- //直接使用类名调用静态方法
- HelloWorld.print();
- //也可以通过对象名调用
- HelloWorld demo = new HelloWorld();
- demo.print();
- }
- }
运行结果为:
注:1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如:
如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:
2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:
3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如:
代码如下:
- public class HelloWorld {
- String name = "博客园";//非静态变量name
- static String hobby = "cnblogs";//静态变量hobby
- //普通成员方法
- public void show(){
- System.out.println("welcome to cnblogs");
- }
- //静态方法
- public static void print(){
- System.out.println("欢迎来到博客园");
- }
- public static void main(String[]args){
- //普通成员方法必须通过对象来调用
- HelloWorld hello = new HelloWorld();
- hello.show();
- //可以直接调用静态方法
- print();
- }
- }
三:Java中的static使用之静态初始化快;
Java 中可以通过初始化块进行数据赋值。如:
在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。
需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
我们来看一段代码:
- public class HelloWorld {
- int num1;//声明变量num1
- int num2;//声明变量num2
- static int num3;//声明静态变量num3
- public HelloWorld(){
- num1 = 91;
- System.out.println("通过构造方法为变量num赋值");
- }
- {//初始化快
- num2 = 74;
- System.out.println("通过初始化块为变量num2赋值");
- }
- static{//静态初始化快
- num3 = 83;
- System.out.println("通过静态初始化块为静态变量num3赋值");
- }public static void main(String[]args){
- HelloWorld hello = new HelloWorld();//创建类的对象hello
- System.out.println("num1:"+hello.num1);
- System.out.println("num2:"+hello.num2);
- System.out.println("num3:"+num3);
- HelloWorld hello2 = new HelloWorld();//创建类的对象hello2
- }
- }
运行结果为:
通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
Java学习笔记十七:Java中static使用方法的更多相关文章
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- Java学习笔记十一:Java中的方法
Java中的方法 一:什么是方法: 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 学过C语言或者其他语言的应该都知道函数这个东西,在Java中,其实方法就是函数,只不过叫法不同,在 ...
- Java 学习笔记(16)——Java数据库操作
数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...
- java 学习笔记1 java语言概述及开发环境
高级语言运行机制 高级语言按程序的执行方式分为编译型和解释型两种. java语言比较特殊,Java程序的执行必须经过先编译后解释的步骤. 1 编译生成字节码,只面向JVM(.class) 2Jvm执行 ...
- JAVA学习笔记之JAVA 对象引用以及赋值
关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没 ...
- Java学习笔记十:Java的数组以及操作数组
Java的数组以及操作数组 一:什么是数组: 数组可以理解为是一个巨大的“盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学生的成绩 数组中的元 ...
- 8.4(Java学习笔记)java脚本引擎(Rhino)
一.java脚本引擎 java脚本引擎是沟通java和脚本语句之间的桥梁,可以通过对应的脚本引擎在java中调用各种脚本语言. 二.脚本引擎执行脚本代码 ScriptEngineManager:为Sc ...
- Java学习笔记(6)---正则表达式,方法
1.正则表达式: a.定义: 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 在Java,一个字符串其实就是一 ...
- Java 学习笔记(4)——java 常见类
上次提前说了java中的面向对象,主要是为了使用这些常见类做打算,毕竟Java中一切都是对象,要使用一些系统提供的功能必须得通过类对象调用方法.其实Java相比于C来说强大的另一个原因是Java中提供 ...
随机推荐
- stream操作 z
常见并常用的stream一共有 文件流(FileStream), 内存流(MemoryStream), 压缩流(GZipStream), 加密流(CrypToStream), 网络流(NetworkS ...
- angular2 应用 不同的environment 进行 build/serve
文件目录如下: 命令行使用:ng serve --e=dev/offline/prod build 不同,像上面那样写没用.必须后面再加--prod 如: ng build --e=offline - ...
- python 利用栈实现复杂计算器
#第五周的作业--多功能计算器#1.实现加减乘除及括号的优先级的解析,不能使用eval功能,print(eval(equation))#2.解析复杂的计算,与真实的计算器结果一致#用户输入 1 - 2 ...
- linux:相关命令以及笔记
首先,在linux 或者 unix里没有任何的反馈就叫成功,例如: (1)命令执行成功的样子:返回了登录用户信息 (2)命令执行失败的样子:没有返回任何东西 1.按键出现状况 解决:可以使用ctrl+ ...
- 零售企业ERP系统慢
数据库优化案例 https://www.cnblogs.com/double-K/p/9210982.html 写在前面 记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是 ...
- java native方法及JNI实例
前言 今天在读java.lang.Object 源码中时发现一个 一个hashCode方法: public native int hashCode() 原因Java很好,使用的人很多.应用极广,但是J ...
- 简易log4j 父logger和子logger
log4j 父logger和子logger 定义子logger其目的就是能够在某一范围内(某一个class或者某一个package)下面,日志的输出方式与其他地方的日志输出方式不同. ...
- luogu P3950 部落冲突
嘟嘟嘟 树剖板子题. #include<cstdio> #include<iostream> #include<algorithm> #include<cma ...
- fastcgi c/c++ API 说明
fastcgi c/c++ API 下载地址:https://github.com/FastCGI-Archives 先上example #include <iostream> #incl ...
- js 实现图片无限横向滚动效果
门户网站好多都有产品无线滚动展现的效果: 测试demo1 -- 非无缝滚动(可以看出来从头开始的效果): css样式如下: .box{ width: 1000px; border: 1px solid ...