一、static静态修饰符

static修饰符能够修饰属性,方法,初始代码块,不能修饰局部变量和类。

静态的变量叫常量,非静态的变量叫实例变量。

1、修饰属性

package gc.test.java.cs2;

public class Info{

    public static String NAME = "张三";
public String addr = "湖北武汉";
}
package gc.test.java.cs2;

public class Main {

    public static void main(String[] args) {
Info info1 = new Info();
System.out.println("name:" + info1.NAME);
System.out.println("addr:" + info1.addr); info1.NAME = "李四";
info1.addr = "北京"; Info info2 = new Info();
System.out.println("name:" + info2.NAME);
System.out.println("addr:" + info2.addr);
}
}

运行结果:

name:张三
addr:湖北武汉
name:李四
addr:湖北武汉

通过上面的运行结果可以看出,Info在第一次被实例化之后,修改Info中的静态变量NAME和变量addr,在第二次实例化之后,静态变量NAME被修改了,但是变量addr被初始化了。可以看出,静态变量是所有实例对象共享的,它属于类,不属于某个实例对象。

2、修饰方法

package gc.test.java.cs2;

public class Info{

    public static String NAME = "张三";
public String addr = "湖北武汉";
public String sex = "男"; public static void showName(){
System.out.println("我的名字叫" + NAME);
} public static void showAddr(){
System.out.println("我住在" + addr);//编译错误
} public void showSex(){
System.out.println("我是" + sex + "生");
}
}
package gc.test.java.cs2;

public class Main {

    public static void main(String[] args) {
Info.showName();
//Info.showSex();//编译错误
Info info = new Info();
info.showSex();
}
}

上面代码中出现第一处编译错误的地方,可以看出静态方法只能访问静态成员。

在第二处出现编译错误的地方,可以看出非静态方法只能通过实例化对象来调用,而静态方法可以直接通过类名.方法名来调用。

package gc.test.java.cs2;

public class Info{

    public static String NAME = "张三";
public String addr = "湖北武汉";
public String sex = "男"; public static void showName(){
String name = this.NAME;//编译错误
System.out.println("我的名字叫" + NAME);
} public void showSex(){
String name = this.NAME;
System.out.println("我是" + sex + "生");
}
}

上面代码中,一个静态方法和一个非静态方法中,同时使用了this关键字,在静态方法中出现编译错误。

package gc.test.java.cs2;

public class Info{

    public static void showName(){

    }

    public void showSex(){

    }

}
package gc.test.java.cs2;

public class Member extends Info{

    public static void showName(){

    }

    public  void showSex(){

    }
}

上面代码中是编译正常,如果将Member中的代码改为

package gc.test.java.cs2;

public class Member extends Info{

    public void showName(){//编译错误

    }

    public static void showSex(){//编译错误
  } 
}

可以看出,静态方法只能重写静态方法,非静态方法只能重写非静态方法。

3、修饰代码块

package gc.test.java.cs2;

public class Info{

    Info(){
System.out.println("Info的无参构造函数");
} static{
System.out.println("Info中的静态代码块");
}
}
package gc.test.java.cs2;

public class Main {

    public static void main(String[] args) {
Info info = new Info();
}
}

运行结果:

Info中的静态代码块
Info的无参构造函数

通过上面的结果,可以看出,静态代码块在实例化对象的时候就执行了,而且执行顺序是在无参构造函数之前。

修饰符-static的更多相关文章

  1. ArcGIS AddIN开发异常之--修饰符“static”对该项无效

    修饰符“static”对该项无效, 修饰符“internal”对该项无效. 该异常弹出的位置为Config.Designer.CS文件中相关插件的声明附近 internal static string ...

  2. 访问修饰符与可选修饰符static的使用

    在Java中修饰符较多,在这里简单说一说几个访问修饰符的选择使用,和可选修饰符static的使用. 一.访问修饰符:这是Java里用来控制访问类及类的方法.变量的访问权限,从而达到只暴露接口,来隐藏内 ...

  3. 【语法】修饰符 static extern const

    转载自:http://my.oschina.net/u/2560887/blog/552683 一.C语言中的static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有 ...

  4. JAVA中静态修饰符static的学习(初学)

    静态修饰符static,用于修饰类中的成员变量和成员函数. 用static修饰的成员变量也可叫做类变量. 什么时候使用静态 什么时候定义静态成员变量?     当对象中出现共享数据时,将该数据定义为静 ...

  5. 修饰符static和abstract

    修饰符static和abstract static static可以修饰类中的方法,属性等,被修饰后的方法和属性可以通过类名直接调用也可以通过对象调用.普通的变量只能通过对象进行调用. 静态方法直接可 ...

  6. java静态修饰符static的使用

    class Person { private String name; private int age; /* * 假设每个Person对象的国籍都一样, * 那么每次调用都要赋值就会不合理. * 使 ...

  7. Java从入门到放弃——05.修饰符static,final,权限修饰符

    本文目标 static final: 权限修饰符:public,private,protected,缺省 1.static 静态修饰符,被static修饰的变量或者方法会被加载进静态区内存,不需要创建 ...

  8. 三大修饰符static,final,abstract,接口和抽象类的区别

    package com.cityhero.test; public class ThreeModifier { //static静态的 // 概念:static可以修饰方法和属性,被static修的方 ...

  9. objectiveC【语法】修饰符 static extern const

    const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...

随机推荐

  1. 阿里云RDS for SQL Server测试吐槽

    最近测试了一下阿里云RDS for SQL Server,有些设计简直就是反人类,让人不得不吐槽一番. 1:控制台创建数据库时,数据库名不能包含大小字母. 如上截图所示,数据库名称不能包含大写字母,好 ...

  2. Abp通用配置模块的设计

    引言 约定优于配置,配置趋于灵活 约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处, ...

  3. TTL 和 DNS TTL 的区别

    TTL TTL是 Time To Live 的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量.TTL是IPv4包头的一个8 bit字段.在IPv4包头中TTL是一个8 bit字段,它位于 ...

  4. Android 平台 Native 代码的崩溃捕获机制及实现

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/g-WzYF3wWAljok1XjPoo7w 一.背景 ...

  5. Python写爬虫爬妹子

    最近学完Python,写了几个爬虫练练手,网上的教程有很多,但是有的已经不能爬了,主要是网站经常改,可是爬虫还是有通用的思路的,即下载数据.解析数据.保存数据.下面一一来讲.   1.下载数据 首先打 ...

  6. Java相关面试题总结+答案(三)

    [多线程] 35. 并行和并发有什么区别? 并行:多个处理器或多核处理器同时处理多个任务.(是真正的物理上的同时发生) 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来 ...

  7. OAuth2实现单点登录SSO

    1.  前言 技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题,“一看就会,一做就错”.网上关于实现SSO的文章一大堆,但是当你真的照着写的时候就会发现根本不是那么回事儿,简直让人抓 ...

  8. 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...

  9. NavUtils【底部虚拟导航栏工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 获取底部虚拟导航栏的高度值 效果图 代码分析 checkDeviceHasNavigationBar(Context context ...

  10. MySQL系列--3.数据类型和连接查询

    1.存储引擎 数据创建,查询,更新和删除操作都是通过数据引擎来进行的.不同的存储引擎存储限制不同,支持不同的索引机制等. 查询数据库支持的存储引擎 MySQL 5.7.2支持的存储引擎有:InnoDB ...