一、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. 在离线环境中安装Visual Stuido 2017

    在离线环境中安装Visual Stuido 2017 0x00 写在前面的废话 因为工作上大多数都是在离线环境中进行的,进出离线环境很麻烦,所以之前很长一段时间都在使用VS2010.后来尝试换了VS2 ...

  2. SignalR使用笔记

    最近项目要求添加一个给用户发送消息的功能,就决定使用SignalR.翻到了以前学习SignalR的学习笔记,基本是官方文档的简版整理,便于快速阅览和实现. 1. nuget添加signalr引用: a ...

  3. CMake安装grpc生成gRPCTargets.cmake文件

    以下是安装语句: cd grpc_folder git submodule update --init cmake .. make -j 4 sudo make install 然而编写依赖gRPC的 ...

  4. Python + PyQt5 实现美剧爬虫可视工具(二)

    美剧<权力的游戏>终于开播最后一季了,在上周写了个简单的可视化美剧的爬虫软件来爬取美剧,链接:https://www.cnblogs.com/weijiutao/p/10614694.ht ...

  5. 利用SQL Profiler 追踪数据库操作

    SQL Server 事件探查器 是一个界面,用于创建和管理跟踪并分析和重播跟踪结果. 这些事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分析或用它来重播一系列特定的步骤. SQL S ...

  6. Redis五大数据类型的常用操作

    在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...

  7. springboot~application.properties和application.yml的使用

    在springboot框架里进行项目开始时,我们在resource文件夹里可以存放配置文件,而格式可以有两种,properties和yml,前者是扁平的k/v格式,而后者是yml的树型结构,我们建议使 ...

  8. Celery异步调度框架(一)基本使用

    介绍 之前部门开发一个项目我们需要实现一个定时任务用于收集每天DUBBO接口.域名以及TOMCAT(核心应用)的访问量,这个后面的逻辑就是使用定时任务去ES接口抓取数据存储在数据库中然后前台进行展示. ...

  9. pwnable.tw dubblesort 分析

    本系列为用于记录那些比较有意思的题目. 题目为一个排序算法,就如题目名称那样,dubblesort,32位程序. 利用思路为栈溢出,先是栈溢出泄露出栈上libc的相关数据从而获取libc地址,再是栈溢 ...

  10. git使用教程指南

    前言  Git是一个开源的分布式版本控制系统.其核心就在于版本控制.  在实际编码过程中,我们往往会忘记上次对文件的修改内容.若是刚刚修改的还好说,撤销操作即可.但若这是你昨天做的修改并关闭了IDE呢 ...