static 静态的,用static修饰的成员叫静态成员或类成员。类实例化的所有对象都会共用同一块静态空间。一个对象将值改变,其它对象的值也就随之改变了。

如:public static int price;  //用static修饰成员属性

public static void eat();  //用static修饰成员方法

static+成员属性(也叫实例变量、成员变量)——>静态属性、类属性

static+成员方法(也叫实例方法)——>静态方法、类方法

static+类——>不存在  (类前不能加static,static是属于类的。类只能有3种修饰符:public、abstract、final)。

static+方法内的局部变量——>不存在(final可以)

static+构造代码块——>静态代码块

static:

(1)类对象共享。

(2)类加载时产生,销毁时释放,生命周期长。

对于普通(非静态)成员,随着一个对象的创建而产生,一个对象销毁,这个对象拥有的属性和方法也就销毁。

但对于静态成员,类第一次加载就会产生,所有对象都不被使用,彻底被销毁,静态资源才被释放。

静态成员比非静态成员多一种调用方式,可以用对象名去调用,最好用类名去调用(因为是类成员),包括:

(1)对象.成员(或this.成员)

(2)类.成员

我们知道,普通成员(非静态)方法内可以直接调用其它成员方法,也可以通过this关键字代表当前对象,去调用成员属性和方法。

非静态成员方法内可以直接访问类中静态成员(静态属性和静态方法)。

在静态方法中不能直接访问同一个类中非静态成员,只能直接调用同一个类中的静态成员(属性和方法),也不能使用this关键字。

【static代表类共享,里面当然不能有每个对象自己的实例,而每个对象实例可以去调用类共享的东西。】

如果想在static方法里使用非static,需要在static方法里实例化对象,再用这个对象去调用非static方法,对象.成员方法(或属性)去访问非静态成员。

public class Demo {
char ch='c';
static char getChar(){
return ch;//编译出错,静态成员不能引用非静态成员
}
public static void main(String[] args){
System.out.println(new Demo().getChar());
}
}

静态代码块

(1)普通代码块:方法中的一段代码  { }      顺序执行,先出现,先执行。分别占据独立作用空间。

public void run(){
{
int temp=12;
System.out.println("普通代码块1,temp="+temp); //代码块1
} {
int temp=13;
System.out.println("普通代码块2,temp="+temp); //代码块2
}
}

  public void run(){
{
int temp=1;
System.out.println("普通代码块1,temp="+temp); //代码块1
}
int temp=3;
{
int temp=2; //此处编译出错
System.out.println("普通代码块2,temp="+temp); //代码块2
}
}
 public void run(){
int temp=3;
{
int temp=1; //此处编译出错
System.out.println("普通代码块1,temp="+temp); //代码块1
} {
int temp=2; //此处编译出错
System.out.println("普通代码块2,temp="+temp); //代码块2
}
}

以上两段代码的int temp=3; 的作用范围都是从开始出现处到程序结束,同一作用范围内,不允许出现同一变量。

public void run(){
// int temp=3;
{
int temp=1;
System.out.println("普通代码块1,temp="+temp); //代码块1
}
System.out.println(temp); //编译出错,代码段结束,变量数据被回收,也就是作用范围不到这。
{
int temp=2;
System.out.println("普通代码块2,temp="+temp); //代码块2
}
}

(2)构造代码块:

在类中与成员方法并列的一段代码{ }。

创建对象时调用,优先于构造方法执行。

若有多段构造代码块,按顺序执行。

每次实例化对象都执行一次。

给静态或非静态赋值均可。

(3)静态代码块:

构造代码块用static修饰。static{ }

类加载时调用,优先于构造代码块执行。

多个静态代码块,按顺序执行。

无论实例化多少个对象,只执行一次。

只能给静态属性赋值,非静态不可以。

即:代码执行顺序为:静态代码块先执行(多个按出现顺序执行),都执行完后,执行构造代码块,然后构造方法。

若有仅希望执行一次的代码可以放在静态代码块中。

Java基础笔记(十五)——封装(续)static关键字的更多相关文章

  1. “全栈2019”Java第四十五章:super关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. Java基础之十五 泛型

    第十五章 泛型 一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大. 在面对对象编程语言中,多态算是一种泛化机 ...

  3. Java基础(十五):Java 中的内部类

    问:什么是内部类呢? 答:内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. 问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多 ...

  4. java基础第十五篇之IO流和递归算法

    FileInputStream : 输入流 int available() : 一次读取所有的字节数 read() : 将文件上的字节读取到内存的数组中 FileOutputStream : 输出流 ...

  5. Java基础(十五)异常(Exception)

    1.处理错误的要求 如果由于出现错误而使得某些操作没有完成,程序应该: 返回到一种安全状态,并能够让用户执行一些其他的命令. 允许用户保存所有操作的结果,并以妥善的方式终止程序. 2.程序中可能出现的 ...

  6. Java基础学习总结(10)——static关键字

    一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是 ...

  7. Java学习笔记十五:Java中的成员变量和局部变量

    Java中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量 ...

  8. java基础(十五)集合(二)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  9. Java 读书笔记 (十五) Java 异常处理

    捕获异常 使用try 和catch关键字可以捕获异常.try/catch 代码块放在异常可能发生的地方. try/catch 代码块中的代码称为保护代码 ,使用try/catch的语法如下: try ...

  10. 夯实Java基础(二十五)——JDBC使用详解

    1.JDBC介绍 JDBC的全称是Java Data Base Connectivity(Java数据库连接).是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问(例如MyS ...

随机推荐

  1. Android之单元测试学习

    1.单元测试概念 单元测试(又称为模块测试),检验程序模块(软件设计的最小单位)正确性的测试工作,常常是程序员写的一段代码.对于面向对象编程,最小单元就是方法,包括基类(超类).抽象类.或者派生类(子 ...

  2. 基于C#的数据库文件管理助手2018-09-02

    数据库文件管理助手说明 目录 一. 数据库的文件导出2 1. web格式 2 2. winform格式 5 3. 二进制格式 5 二. 文件批量工具8 1. 文件批量改名GUID 8 2. 文件批量下 ...

  3. BZOJ3700: 发展城市

    BZOJ3700: 发展城市 https://lydsy.com/JudgeOnline/problem.php?id=3700 分析: 枚举两个人,先求链交,求到两个端点的时间. 链交求法:求两两\ ...

  4. JVM类加载(2)—连接

    2.连接 连接就是将已经加载到内存中的类的二进制数据合并到Java虚拟机的运行时环境中去,加载阶段尚未完成,连接阶段可能已经开始.连接阶段包含验证.准备.解析过程. 2.1.验证 验证.class文件 ...

  5. PHP7三元运算符 ?? 和 ?: 的区别

    1. (expr1) ?? (expr2)  是 PHP7才有的功能,等同于: isset(expr1) ? expr1 : expr2 ; 2.(expr1) ?: (expr2) 是PHP5.3才 ...

  6. 关于surf显示立体图,可视化分析数据

    如果想判断一个点(x,y)对应的ZV值是否在平面上方.平面上.平面下方,只要将(x,y)带入方程,得到z. 如果ZV大于>Z,则在平面上方:如果ZV<Z,则在方面下方:若ZV=Z,则在平面 ...

  7. redis-数据类型-string、hash、list、set、zset

    String 类型操作string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象. $redis-> ...

  8. Eclipse插件——EasyExplore安装

    Eclipse插件--EasyExplore安装 分类: eclipse2011-12-07 09:02 458人阅读 评论(0) 收藏 举报 插件功能 easyexplore是一个eclipse的小 ...

  9. 6、perl创建模块(Exporter)及路径 引用 嵌套 查询模块

    参考博客:http://www.cnblogs.com/xudongliang/tag/perl/ 1.perl 模块的创建以及制定perl 模块的路径 (1)创建一个Myfun.pm模块. #/us ...

  10. windows 服务器安装python及其基本库

    步骤如下: 一.安装python软件: 1.进入windows服务器,从网址下载 python-3.5.4-amd64软件 到桌面: 2.在软件点右键,再“”以管理员身份运行“”,输入管理员密码: 3 ...