java中static的作用
2016-03-29 22:17
501 查看
1、static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享(因此可以用來统计一个类有多少个实例化对象),所以有些属性希望被所有对象共享,则必须将其声明为static属性,被static声明的属性成为全局属性。
2、只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
3、类中定义的静态代码块会优先于构造块先执行,而且不管有多少个对象,静态代码块只执行一次
例1:
class PersonE{
private String name;
private int age;
private static String country = "A城";
public PersonE(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
PersonE.country = country;
}
public void info(){
System.out.println("姓名:"+this.getName()+","+"年龄:"+this.getAge()+","+"城市:"+country);
}
}
public class StaticUse {
public static void main(String[] args){
PersonE per1 = new PersonE("张三",20);
PersonE per2 = new PersonE("李四",22);
System.out.println("---------修改之前--------");
per1.info();
per2.info();
System.out.println("---------修改之後---------");
PersonE.setCountry("B城");
per1.info();
per2.info();
}
}
例2:
public class StaticUse{
private static int s;
public StaticUse(){
System.out.println("Creat new Class");
}
static{
System.out.println("static block initialized");
}
public static int getS() {
return s;
}
public static void setS(int s) {
StaticUse.s = s;
}
public static void main(String[] args){
StaticUse classA = new StaticUse();
StaticUse classB = new StaticUse();
System.out.println("classA.s ="+classA.getS()+";classB.s ="+classB.getS());
classA.setS(10);
System.out.println("classA.s ="+classA.getS()+";classB.s ="+classB.getS());
classB.setS(classB.getS()+10);
System.out.println("classA.s ="+classA.getS()+";classB.s ="+classB.getS());
}
}
例子3、
class PersonE{
private static int count = 0;
public PersonE(){
count++;
System.out.println("产生了"+count+"个对象");
}
}
public class StaticUse{
public static void main(String[] args){
new PersonE();
new PersonE();
}
}
例子4:
class PersonE{
{
System.out.println("1、构造块。");
}
static{
System.out.println("0,静态代码块。");
}
public PersonE(){
System.out.println("2、构造方法。");
}
}
public class StaticUse{
static{
System.out.println("在主方法所在的类中定义的代码块。");
}
public static void main(String[] args){
new PersonE();
new PersonE();
}
}
2、只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
3、类中定义的静态代码块会优先于构造块先执行,而且不管有多少个对象,静态代码块只执行一次
例1:
class PersonE{
private String name;
private int age;
private static String country = "A城";
public PersonE(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
PersonE.country = country;
}
public void info(){
System.out.println("姓名:"+this.getName()+","+"年龄:"+this.getAge()+","+"城市:"+country);
}
}
public class StaticUse {
public static void main(String[] args){
PersonE per1 = new PersonE("张三",20);
PersonE per2 = new PersonE("李四",22);
System.out.println("---------修改之前--------");
per1.info();
per2.info();
System.out.println("---------修改之後---------");
PersonE.setCountry("B城");
per1.info();
per2.info();
}
}
例2:
public class StaticUse{
private static int s;
public StaticUse(){
System.out.println("Creat new Class");
}
static{
System.out.println("static block initialized");
}
public static int getS() {
return s;
}
public static void setS(int s) {
StaticUse.s = s;
}
public static void main(String[] args){
StaticUse classA = new StaticUse();
StaticUse classB = new StaticUse();
System.out.println("classA.s ="+classA.getS()+";classB.s ="+classB.getS());
classA.setS(10);
System.out.println("classA.s ="+classA.getS()+";classB.s ="+classB.getS());
classB.setS(classB.getS()+10);
System.out.println("classA.s ="+classA.getS()+";classB.s ="+classB.getS());
}
}
例子3、
class PersonE{
private static int count = 0;
public PersonE(){
count++;
System.out.println("产生了"+count+"个对象");
}
}
public class StaticUse{
public static void main(String[] args){
new PersonE();
new PersonE();
}
}
例子4:
class PersonE{
{
System.out.println("1、构造块。");
}
static{
System.out.println("0,静态代码块。");
}
public PersonE(){
System.out.println("2、构造方法。");
}
}
public class StaticUse{
static{
System.out.println("在主方法所在的类中定义的代码块。");
}
public static void main(String[] args){
new PersonE();
new PersonE();
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树