static 关键字的使用及说明
static 关键字主要有以下几种使用场景:
- 修饰类的成员变量。
- 修饰类的成员方法。
- 修饰类的代码块。
- 修饰内部类。
1. static 修饰类的成员变量时,被称为静态成员变量。引用 static 修饰的成员变量时,无需创建类的实例对象,可直接使用 类.变量名 进行调用。
代码示例:
public class Student {
int age; //普通变量
static String name; //静态变量
}
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.age); //普通成员变量,需要实例化对象进行调用
System.out.println(Student.name); //静态成员变量,无需实例化对象即可调用
}
2. static 修饰类的成员方法时,被称为静态成员方法。引用 static 修饰的成员方法时,无需创建类的实例对象,可直接使用 类.方法名 进行调用。
代码示例:
public class Student {
/**
* 普通方法
*/
public void haha(){}
/**
* 静态方法
*/
public static void say(){}
}
public static void main(String[] args) {
Student student = new Student();
student.haha(); //普通成员方法,需要实例化对象进行调用
Student.say(); //静态成员方法,无需实例化对象即可调用
}
3. static 修饰类的代码块时,被称为静态代码块。在类加载时,静态代码块先执行,其次是普通代码块,最后是类的构造方法。而且不管类创建多少对象,静态代码块只执行一次, 而普通代码块和构造方法会执行多次。
代码示例:
public class Student {
Student(){
System.out.println("我是默认的构造方法");
}
{
System.out.println("我是代码块");
}
static {
System.out.println("我是被static修饰的静态代码块");
}
}
public static void main(String[] args) {
Student s1=new Student();
Student s2=new Student();
}
输出结果:
我是被static修饰的静态代码块
我是代码块
我是默认的构造方法
我是代码块
我是默认的构造方法
4. static 只能修饰内部类,不能修饰普通类。
代码示例:
public class Student {
private String name;
public static class School{ //static修饰的内部类
private String name;
}
}
看下面的代码示例:
public class Student {
int age; //普通变量
static String name; //静态变量
{
System.out.println("我是代码块1");
}
{
System.out.println("我是代码块2");
}
static {
System.out.println("我是被static修饰的静态代码块1");
}
static {
System.out.println("我是被static修饰的静态代码块2");
}
Student(){
System.out.println("我是默认的构造方法");
}
/**
* 普通方法
*/
public void haha(){
System.out.println("我是一个普通方法");
System.out.println(name);
}
/**
* 静态方法
*/
public static void say(){
System.out.println("我是一个静态方法");
}
}
public class Main{
public static void main(String[] args) {
Student.name="张三";
Student s1=new Student();
Student s2=new Student();
s2.haha();
Student.say();
}
}
运行结果:
我是被static修饰的静态代码块1
我是被static修饰的静态代码块2
我是代码块1
我是代码块2
我是默认的构造方法
我是代码块1
我是代码块2
我是默认的构造方法
我是一个普通方法
张三
我是一个静态方法
从上面的代码和运行结果可以得出以下结论:
- 被 static 修饰的变量,无需创建类的实例变量,可以直接使用 类.变量名 进行调用,进而取值或者赋值。
- 被 static 修饰的方法,无需创建类的实例变量,可以直接使用 类.方法名 进行调用。
- 被 static 修饰的变量和方法属于类的,被所有的对象共享。
- 当 new 一个对象时,如果类中有静态代码块和普通代码块,那最先执行的是静态代码块,其次是普通代码块,最后才是类的构造方法。
- 如果一个类中有多个静态代码块,那么执行的时候,从上往下依次执行。
- 无论创建多少个实例对象,类中的静态代码块只会执行一次,而普通代码块会多次执行。
- 在静态成员方法内部不能调用非静态成员变量,而非静态成员方法则没有此限制。
- static不能修饰局部变量。
总结性描述:
static表示静态的意思,一般用于修饰成员变量(类变量、静态变量)和成员函数(类方法、静态方法),被static修饰的方法只能访问静态成员变量和静态方法,不可以直接访问非静态成员变量和非静态方法;非静态方法可以直接调用静态的变量和方法。静态是随着类的加载而加载的,因此可以直接用类进行访问。static也可以修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需要实例一个外部类。
请看一下下面的代码示例:
public class Student {
{
System.out.println("我是代码块");
}
static {
System.out.println("我是被static修饰的静态代码块");
}
public Student(){
System.out.println("我是默认的构造方法");
}
}
public class ZhangSan extends Student{
{
System.out.println("111我是代码块");
}
static {
System.out.println("111我是被static修饰的静态代码块");
}
public ZhangSan(){
System.out.println("111我是默认的构造方法");
}
}
public class Main{
public static void main(String[] args) {
ZhangSan zhangSan = new ZhangSan();
}
}
运行结果:
我是被static修饰的静态代码块
111我是被static修饰的静态代码块
我是代码块
我是默认的构造方法
111我是代码块
111我是默认的构造方法
static 关键字的使用及说明的更多相关文章
- 浅谈Static关键字
1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- PHP的final关键字、static关键字、const关键字
在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...
- Java Static关键字详解
提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- c++中static关键字的用法总结
类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类体中 ...
- static关键字
static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象. 1.static关键字的特点 a:随着类的加载而加载 b:优先于对象存在 (还 ...
- C++中的static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
随机推荐
- 树————N叉树的层序遍历
思想: 使用队的思想,将每一层的节点放入队列中,依次弹出,同时将其children放入队列. c++ /* // Definition for a Node. class Node { public: ...
- IDM自定义报错页面
由于用户两次重复单点登录会跳转至原生态ORACLE的错误页面页面.请提供配置方法.原因:是由于重复登录导致的.解决方案:Oracle官方给出了具体的解决方案,具体如下:I.创建战争档案a.创建目录&q ...
- [经典]Python 一篇学会多线程
对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是单任 ...
- 洛谷 P3369 【模板】普通平衡树 (Treap)
题目链接:P3369 [模板]普通平衡树 题意 构造一种数据结构满足给出的 6 种操作. 思路 平衡树 平衡树的模板题. 先学习了一下 Treap. Treap 在插入结点时给该结点随机生成一个额外的 ...
- HDU 1392 Surround the Trees (凸包周长)
题目链接:HDU 1392 Problem Description There are a lot of trees in an area. A peasant wants to buy a rope ...
- Codeforces 1189A Keanu Reeves
题目链接:http://codeforces.com/problemset/problem/1189/A 思路:统计1 和 0 的个数,不相等拆开字符串,否则不拆. AC代码: #include< ...
- Springboot循环依赖
背景 最近在使用Springboot做项目的时候,遇到了一个循环依赖的 问题.那什么是循环依赖呢,常见的一种情形就是在ServiceA中注入了ServiceB,在ServiceB中也注入了Servic ...
- 关于第一次将STM32与电脑连接情况
安装了Keil(ARM)版本之后,不管是自己编程,还是配套的程序运行.我们都想把它下载到STM32芯片里面,在板子上运行.这里介绍几种方法. 1.用J-LINK下载调试. 这个工具,可以直接点击kei ...
- session复制
环境描述:(三台服务器 系统:7.6)192.168.200.111 nginx192.168.200.112 tomcat192.168.200.113 tomcat环境配置:192.168.200 ...
- struts2注解方式的验证
struts2的验证分为分编程式验证.声明式验证.注解式验证.因现在的人越来越懒,都追求零配置,所以本文介绍下注解式验证. 一.hello world 参考javaeye的这篇文章,按着做一次,起码有 ...