Java中static的使用
static 使用之静态变量:
大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!!
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~
使用 static 可以修饰变量、方法和代码块。
本小节,我们先认识一下静态变量。
我们先来看一段简单的代码你就会明白什么是静态变量!
public class HelloWorld{
static String name = "Hello Java";//用static修饰的变量就是静态变量
public static void main(){
System.out.println("通过类名访问它:"+HelloWorld.name);
HelloWorld hello = new HelloWorld();
System.out.println("通过对象访问它:"+hello.name);
hello.name = "我是最棒的!";//使用对象名的形式来修改静态变量的值!
System.out.println("通过类名访问它:"+HelloWorld.name);
}
}
要注意哦:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!~~
static使用之静态方法:
与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。
静态方法的使用如下:
public class HelloWorld{
public static void print(){
System.out.println("我爱Java”);
}
public static void main(String [] args){
//直接实用类名调用
HelloWorld.print();
//也可以创建对象调用它
HelloWorld demo = new HelloWorld();
demo.print();
}
}
1.静态方法中可以直接条用同类中的静态成员;但是不能调用非静态成员;
public class HelloWorld{
static String name = "hello";
String hobby = "hello";
public static void main(String [] args){
System.out.println("同类中可以直接调用静态成员"+name);
System.out.println("不可以直接调用非静态成员"+hobby);
}
}
如果想要调用非静态成员我们可以创建对象来调用他:
1 public class HelloWorld{
2 static String name = "hello";
3 String hobby = "hello";
4 public static void main(String [] args){
5 System.out.println("同类中可以直接调用静态成员"+name);
6 HelloWorld hello = new HelloWorld();
7 System.out.println("不可以直接调用非静态成员"+hello.hobby);
8 }
9 }
2.在普通成员方法中,既可以直接使用静态成员变量也可以直接使用非静态成员变量:
public class HelloWorld{
static String name = "hello";
String hobby = "hello";
public void show(){
System.out.println("同类中可以直接调用静态成员"+name);
System.out.println("可以直接调用非静态成员"+hobby);
}
}
static 使用之静态初始化块:
public class HelloWorld{
String name;
//通过初始化块给成员变量赋值
{
name = "我爱Java";
}
}
在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。
1 public class HelloWorld{
2 static String name;
3 //静态初始化代码块
4 static{
5 name = "我爱Java";
6 }
7 }
需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
我们来看一段代码:
public class HelloWorld{
int num1;
int num2;
static int num3;
public HelloWorld(){
num1 = ;
System.out.println("通过构造方法为变量num1赋值!");
}
{//初始化块
num2 = ;
System.out.println("通过初始化块为变量num2赋值!");
}
static {
num3 = ;
System.out.println("通过静态初始化块为静态变量num3赋值!");
}
public static void main(String [] args){
HelloWorld hello = new HelloWorld();
System.out.println("num1:"+hello.num1);
System.out.println("num2:"+hello.num2);
System.out.println("num3:"+num3);
HelloWorld hello2 = new HelloWorld();
}
}
运行结果:
通过静态初始化块为静态变量num3赋值!
通过初始化块为变量num2赋值!
通过构造方法为变量num1赋值!
num1:91
num2:81
num3:56
通过初始化块为变量num2赋值!
通过构造方法为变量num1赋值!
通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
Java中static的使用的更多相关文章
- java中static关键字的作用
java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...
- Java中static的用法,初始化块
使用 Arrays 类操作 Java 中的数组语法: Arrays.sort(数组名); 可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该 ...
- Java中static块执行时机
Java中static块执行时机 演示例子 在使用static进行初始化的操作,怎么也执行不了!代码如下: public class StaticDemo { public static final ...
- Java学习笔记十七:Java中static使用方法
Java中static使用方法 一:Java中的static使用之静态变量: 我们都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的 ...
- java中static变量和方法的总结
转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...
- Java中static final 与 final 的区别(转载)
转自:http://advance0683.iteye.com/blog/1107732 Java中static final 与 final 的区别: 例子: Java代码 import java.u ...
- Java中static修饰类的问题
Java中static修饰类的问题 众所周知,Java中static关键字可以修饰方法与变量: 修饰变量的时候,这个变量属于类变量,可以直接通过类名.变量名来引用. 修饰方法的时候可以直接通过类名.方 ...
- Java 中 static 的作用
static 关键字的作用 在 Java 中 static 关键字有4种使用场景,下面分别进行介绍: 1.static 成员变量 public class Student { // 静态成员变量 pr ...
- 关于java中static的应用及一种常见错误
JAVA中的static的应用 在web项目的开发中,遇到了类中的static方法不奏效. 在开发过程中,我定义了一个静态方法初始化数组,但是在创建类的对象后,访问该数组是全为null.我一直以为st ...
- Java中static的用法
static静态,作为修饰符,最初是由c引入,一开始static表示退出一个块后依然存在的局部变量.随后,static表示不能被其他文件访问的全局变量和函数.到了C++和java,static表示属于 ...
随机推荐
- 解决Android编译so库出错问题
设置中必须进行如下修改
- [服务器安全]升级OpenSSH,OpenSSL,vsftp,关闭NTP服务
公司的旧版直播服务器使用的是CentOS 6.7,很多软件包都是几年前的了.最近很多安全相关的新闻充斥着IT圈,先是Intel芯片有重大安全漏洞,后面MacOS爆安全漏洞.所以,对于安全问题还真不能小 ...
- 算法笔记_160:算法提高 约数个数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 输入一个正整数N (1 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,12.共6个 2 解决方案 具体代码如下: im ...
- 算法笔记_085:蓝桥杯练习 9-3摩尔斯电码(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"zylib.h",只能使用 ...
- vue打包后出现一些map文件的解决方法
Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1.运行 cnpm run build 开始 ...
- python和c#通用一致的des加密采用CBC和PKCS7
在python下可以下载pydes 下载地址为 http://pydes.sourceforge.net/ 在c#下实现des加密较为简单,如下: using System; using System ...
- 反射机制2,Class类的使用
class是反射源头,不光可以取得对象所在类信息,也可直接通过class类的方法进行对象的实例化操作. 使用关键字new为对象实例化.如果已经实例化好了class对象,就可以通过class类中提供的n ...
- expect脚本免密码
#!/usr/bin/expect set timeout spawn ssh root@20.0.102.19 expect "password:" send "123 ...
- 学会Git玩转Github笔记(二)——Git使用
一.Git基本工作流程 Git工作区域 向仓库中添加文件流程 二. Git初始化及仓库创建和操作 基本信息设置 . 设置用户名 git config --global user.name 'itcas ...
- (转)解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题
解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题 开发人员提交一个dump文件(Windows Server 2008 R2),当前调试环境Windows Serve ...