再回首之关键字static

在刚刚学习java时接触了static,如类中主方法public static void  main(String [] args),以前也是“不求甚解”,正所谓基础不牢地动山摇啊!

现在要对基础知识做一个深刻的理解

1、static关键字

static关键字用于修饰:属性、方法、内部类、代码块。

static修饰的资源属于类级别,是全体对象的共享资源

1)static修饰的属性(静态属性/类属性)

根据上面的说法静态属性应该是该类全体对象的共享属性

如下代码

package com.shxt.bishi;
class Person{
String name;
static String city;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person(String name, String city, int age) {
super();
this.name = name;
this.city = city;
this.age = age;
}
public String talk(){
return "名字:"+name+","+"国家:"+city+","+"年龄:"+age;
}

}
public class StaticDemo {
public static void main(String[] args) {
Person p1=new Person("张三", "中国",25 ) ;
Person p2=new Person("李四", "中国",20 ) ;
Person p3=new Person("王五", "中国",30 ) ;
System.out.println(p1.talk());
System.out.println(p2.talk());
System.out.println(p3.talk());
System.out.println("static属性的共享的体现");
Person.city="美国";
Person p4=new Person("张三", 25);
Person p5=new Person("李四", 20);
Person p6=new Person("王五", 30);
System.out.println(p4.talk());
System.out.println(p5.talk());
System.out.println(p6.talk());
}

如果没有static修饰,如果有50个对象,那么就得修改50次city这个属性

类加载的过程,类本身也是保存在文件中(字节码文件保存着类的信息)的,java会通过I/O把类的文件读入JVM,这个过程 称为类的加载

JVM会通过类路径(CLASSPATH)来找字节码文件,需要时进行类加载,生成对象是先加载后构造

注意:

static修饰的属性是在类加载时被创建并进行初始化,类加载的过程就一次,也就是类变量只会创建一次

2)static修饰的方法(静态方法/类方法)

会使这个方法成为整个类共有的方法,可以用“类名.方法名”调用

注意:

static修饰的方法不能访问本类中的非静态成员变量(非静态成员变量需要实例化才能用),但本类中的非静态方法,可以访问本类静态变量(类加载时初始化)

我们最熟悉的主方法之所以要使用static修饰的原因:就是因为在类加载是无法创建对象,而静态方法的调用不需要实例化(通过对象调用),所以在类加载时就可以

通过main方法来执行程序

3)static修饰的代码块

这是这个代码块叫做静态代码块,这个代码块只在类加载时执行一次

如下面的代码

从执行结果看出static修饰资源的过程

时间: 2024-08-06 03:41:44

再回首之关键字static的相关文章

java关键字static

static修饰符可以修饰变量.常量.方法和代码块,分别称为静态变量.静态常量.静态方法和静态代码块. 1.static变量 在java中,如果希望某个变量的值能被所有的对象共享,可以将该变量声明为静态变量(也叫类变量).静态变量在类装载时,只分配一块储存空间,所有此类的对象都可以操控此块储存空间,它为所有类实例提供共享的变量.当一个对象将该变量修改后,其他对象再使用该变量将会是改变后的数据.声明静态变量的语法如下: [权限控制符] static 成员变量类型 成员变量名: 访问静态变量的语法如

设计模式之SOLID原则再回首

    本科阶段学过设计模式,那时对设计模式的五大原则--SOLID原则的概念与理解还是比较模糊,此时过去了2年时间,在学习<高级软件工程>课程中老师又提到了设计模式,课程中还详细讨论了五大原则的过程,这次SOLID原则再回首作者提出了一些更通俗的理解吧~ 一. 什么是设计模式?     那么,什么是设计模式呢? 从广义角度讲设计模式是可解决一类软件问题并能重复使用的设计方案; 从狭义角度讲设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,是在类和对象的层次描述的可重复

JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.csdn.net/m366917 我们来继续学习多线程 Lock锁的使用 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock Lock void lock():获取锁 v

关键字static完全解析

在c语言中关键字static的意思是静态,它有三个明显的作用. 1).在函数体内,静态变量具有"记忆功能",即一个变量被声明为静态变量,在函数下次被调用时仍保留上次调用该函数时该静态变量的值. 代码如下: /* Name: 52coder Copyright: 52coder.net Author: 尘世中迷途小书童 Date: 15/05/15 11:49 Description: */ #include <stdio.h> void fun() { static int

Java之关键字static和final的使用

static 在Java中声明属性.方法时,可使用关键字static来修饰. 1.static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量. 两者的区别是:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的).对于实例变量,没创建一个实例,就会为实例变量分配一次

C++关键字static解析总结

http://developer.51cto.com/art/201104/254141.htm(下文引用地址) 要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样:我们通常声明一个变量: int a; string s; 其实就是: auto int a; auto string s; 而static变量的声明是:

Java关键字--static

在Java中,将关键字static分为三部分进行讨论,分别为Java静态变量.Java静态方法.Java静态类 Java Static Variables Java instance variables are given separate memory for storage. If there is a need for a variable to be common to all the objects of a single java class, then the static mod

关键字static

这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区). 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量. 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用. 大多数应试者能正确回答第一部分,一部分能正确回答第二部

再回首,Java温故知新&mdash;&mdash;开篇说明

不知不觉在IT界从业2年了,两年时间足够一个人成长很多,当然也会改变很多事.在这两年时间里,随着对技术的深入了解,知识面的拓展以及工作难度的增大,渐渐的感觉自己技术方面根基不稳,多数问题也只是做到知其然而已.最近打算利用晚上的自由时间再学习一遍Java,所以入手了一本Java经典书籍——<Java核心技术 卷Ⅰ>.而博客也打算开始<再回首,Java温故知新>系列记录自己学习过程中一些要点,希望自己通过这次的学习不仅可以做到知其然,也能做到知其所以然,同时也希望这系列博客可以帮到一些