java----作用域
代码块:
如果Test类继承了父类,会先执行父类的静态代码块和构造代码块(如果是创建对象的情况下)
static{}:代码块是类的加载过程中初始化阶段执行的。和new对象没有任何关系,比如Test.静态属性,也同样会触发static{},只是在new 对象过程中,如果发现当前类还没有被加载到内存,就会将类加载到内存,在初始化过程中执行了<clinit>() 方法,如果static{}中有打印信息,就会被打印出来,如果第二期new 对象的时候,发现类已经加载内存了,就不会再进行初始化了.也就是为什么多次new 对象,static 变量只有一个的原因了(全局共享),而且这个变量就和对象没有任何关系了(但是还是可以通过对象访问静态变量和静态方法的,一个对象对静态变量的修改会影响到另一个对象)
public class Demo {
public static void main(String[] args){
Test t = new Test();
Test t1 = new Test();
}
}
class Test{
static{
System.out.println("静态代码块");//在类中使用static定义,最先执行,只会创建一次(当创建第二个对象是,不会再执行该代码,static只存储一次)
}
{
System.out.println("构造代码块");//在类中定义,优先构造方法执行,每次创建对象都会执行
}
public Test(){
{
System.out.println("普通代码块"); //在方法中定义,方法被调用执行
}
System.out.println("我是构造方法");
}
}
通过类调用静态方法只会调用静态代码块,多次调用也会执行一次静态代码块。(如果继承父类,同样会先执行父类的)
public class Demo {
public static void main(String[] args){
Test.t();
Test.t();
}
}
class Test{
static{
System.out.println("静态代码块");//在类中使用static定义,最先执行,只会创建一次(当创建第二个对象是,不会再执行该代码,static只存储一次)
}
{
System.out.println("构造代码块");//在类中定义,优先构造方法执行,每次创建对象都会执行
}
public Test(){
{
System.out.println("普通代码块"); //在方法中定义,方法被调用执行
}
System.out.println("我是构造方法");
}
public static void t(){
}
}
Test t = null;不会有任何操作
调用通过类调用final修饰的字段(同时被static修饰,不然不能被类直接调用)不会初始化。
public class Demo {
//main方法会被调用,所有static会被执行
static {
System.out.println("x");
}
public static void main(String[] args){
//这样不会执行Test中的任意代码块
Test t = null;
}
}
class Test{
static{
System.out.println("静态代码块");//在类中使用static定义,最先执行,只会创建一次(当创建第二个对象是,不会再执行该代码,static只存储一次)
}
{
System.out.println("构造代码块");//在类中定义,优先构造方法执行,每次创建对象都会执行
}
public Test(){
{
System.out.println("普通代码块"); //在方法中定义,方法被调用执行
}
System.out.println("我是构造方法");
}
}
下面输出结果:构造。构造。静态。构造
public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("构造块");
}
static
{
System.out.println("静态块");
}
public static void main(String[] args)
{
B t = new B();
}
}
java----作用域的更多相关文章
- [学习笔记]Java作用域变量申明和C、C++的差异性
Java作用域 大多数程序设计语言都提供了“作用域”(Scope)的概念.对于在作用域里定义的名字,作用域同时决定了它的“可见性”以及“存在时间”.在C,C++和Java 里,作用域是由花括号的位置决 ...
- java作用域-转
java中,针对不同的修饰词,类及其类中的方法.域都有不同的可见性.以下为针对java中可见性的几点总结. 1.java中的默认包(这个包是没有名称的),对于任何修饰词来说,其中的内容只能对其包内类为 ...
- java作用域public ,private ,protected 及不写时的区别
说明部分转自:http://yangmingjiayou.iteye.com/blog/151865 在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,ba ...
- java作用域public ,private ,protected 及不写时的区别(转)
在说明这四个关键字之前,我想就class之间的关系做一个简单的定 义,对于继承自己的class,base class可以认为他们都是自己的子 女,而对于和自己一个目录下的classes,认为都是自己的 ...
- Java作用域
1. java访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权限. 默认的,也称为 default,在同一包内可见,不使用任何修饰符. ...
- JAVA作用域和排序算法介绍
一.作用域 1.作用域的概念 所谓的作用域是指引用可以作用到的范围. 一个引用的作用域是从引用定义位置到包裹它的最近的大括号的结束位置.只有在作用域范围内才可以访问到引用,超出作用域无法访问引用. 定 ...
- think in java学习笔记
java作用域关键字: public:任何人均可使用 private:除您自己.类型的创建者以及那个类型的内部函数成员,其他任何人都不能访问 protected:只有继承的类可以访问 friendly ...
- java与c++的访问权限的问题
转自网络:http://blog.sina.com.cn/s/blog_4bc954d30100wtxe.html 权限的理解重要理解什么是可见什么是不可见 首先声明:java中,friendly这个 ...
- java_面试_01_一个月的面试总结(java)
重点知识 由于我面试的JAVA开发工程师,针对于JAVA,需要理解的重点内容有: JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻) JVM内存调优(了解是怎么回事,一般做项目过程 ...
- JAVA 需要理解的重点 一
需要理解的重点内容有: JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻) JVM内存调优(了解是怎么回事,一般做项目过程中使用较多) 设计模式(熟悉常见设计模式的应用场景,会画类 ...
随机推荐
- NPOI 列宽自适应 代码示例
//列宽自适应,只对英文和数字有效 for (int i = 0; i <= maxColumn; i++) { sheet.AutoSizeColumn(i); } //获取当前列的宽度,然后 ...
- ReentrantLock(重入锁)的使用
//效果和synchronized一样,都可以同步执行,lock方法获得锁,unlock方法释放锁public class MyService { private Lock lock = new Re ...
- android4.4之后的HttpUrlConnection的实现是基于okhttp
首先看HttpUrlConnection使用 URL url = new URL("http://www.baidu.com"); HttpURLConnection urlCon ...
- scrapy基础 之 爬虫入门:先用urllib2来跑几个爬虫
1,爬取糗事百科 概况:糗事百科是html网页,支持直接抓取html字符然后用正则过滤 爬取糗事百科需要同时发送代理信息,即user-agent import urllib2,re def pacho ...
- IntelliJ IDEA 导入eclipse项目包及附属包
使用IntelliJ IDEA 工具导入eclipse项目包,并添加另外一个项目包为库文件 1.导入项目包1,如Demo1,File-->New--->Progect From Exist ...
- gradle记录
set-env.bat set "JAVA_HOME=G:\jdk" set "CLASSPATH=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\ ...
- cartographer 最新版安装测试
在官网的基础上稍加修改,但保证代码都是最新的 我的系统配置: Debian9 strech, ROS lunar 该方法对 ubuntu 系列操作系统以及其他ROS版本同样适用. 1. 安装依赖库 ...
- 20165231 2017-2018-2 《Java程序设计》第2周学习总结
前言 第二周算是正正式式的学习了java程序设计.之前对java是一片茫然,现在算是初见端倪了,知道了java程序的基本开头,多个class时该运行哪个,哪个是输出打印语句等等. 目前我使用的java ...
- *445. Add Two Numbers II
1. 原始题目 You are given two non-empty linked lists representing two non-negative integers. The most si ...
- 消息队列:JMS之基本概念介绍
摘要:The Java Message Service (JMS) API is a messaging standard that allows application components bas ...