深入理解java虚拟机(三)(一个类加载器只初始化一次类对象,不同类加载器可以对同一类对象进行初始化)
2016-01-05 21:35
501 查看
package com.ygl;
class Final{
public static final int x=6/3;//此处x在编译时能计算出值,是编译时的常量,则System.out.println(Final.x);直接输出值,不再执行下面static(前提是final)
static{
System.out.println("Final ");
}
}
public class Test2 {
public static void main(String[] args) {
System.out.println(Final.x);
}
}
//*************************************
2
//======================================
import java.util.Random;
class FinalTest2{
public static final int x=new Random().nextInt(100);//运行时才确定x的值,编译时变量
static{
System.out.println("FinalTest2");
}
}
public class Test3 {
public static void main(String[] args) {
System.out.println(FinalTest2.x);
}
}
//****************************************
FinalTest2
10
//**********************************************************
package com.ygl;
class Parent{
static int a=3;
static {
System.out.println("Parent ");
}
}
class Children extends Parent{
static int b=4;
static{
System.out.println("Children extends Parent");
}
}
public class Test4 {
static {
System.out.println("Test4");
}
public static void main(String[] args) {
System.out.println(Children.b);
}
}
//********************************
Test4
Parent
Children extends Parent
4
//****************************************
package com.ygl;
class Parent2{
static int a=3;
static {
System.out.println("Parent ");
}
}
class Children2 extends Parent2{
static int b=4;
static{
System.out.println("Children extends Parent");
}
}
public class Test5 {
static {
System.out.println("Test5");
}
public static void main(String[] args) {
Parent2 parent;
System.out.println("------------------------");
parent =new Parent2();
System.out.println(Parent2.a);
System.out.println(Children2.b);
}
}
//******************************
Test5
------------------------
Parent
3
Children extends Parent
4
//*******************************************
package com.ygl;
/**
* 只有当程序访问的静态变量或静态方法确实在当前类或当前接口中定义时,才可以认为是对类或或接口的主动使用
* @author lenovo
*
*/
public class Test6 {
public static void main(String[] args) {
System.out.println(Children3.a);
Children3.doSomething();
}
}
class Parent3{
static int a=3;
static {
System.out.println("Parent ");
}
static void doSomething(){
System.out.println("doSomething");
}
}
class Children3 extends Parent3{
static{
System.out.println("Children extends Parent");
}
}
//******************************
Parent
3
doSomething
class Final{
public static final int x=6/3;//此处x在编译时能计算出值,是编译时的常量,则System.out.println(Final.x);直接输出值,不再执行下面static(前提是final)
static{
System.out.println("Final ");
}
}
public class Test2 {
public static void main(String[] args) {
System.out.println(Final.x);
}
}
//*************************************
2
//======================================
import java.util.Random;
class FinalTest2{
public static final int x=new Random().nextInt(100);//运行时才确定x的值,编译时变量
static{
System.out.println("FinalTest2");
}
}
public class Test3 {
public static void main(String[] args) {
System.out.println(FinalTest2.x);
}
}
//****************************************
FinalTest2
10
//**********************************************************
package com.ygl;
class Parent{
static int a=3;
static {
System.out.println("Parent ");
}
}
class Children extends Parent{
static int b=4;
static{
System.out.println("Children extends Parent");
}
}
public class Test4 {
static {
System.out.println("Test4");
}
public static void main(String[] args) {
System.out.println(Children.b);
}
}
//********************************
Test4
Parent
Children extends Parent
4
//****************************************
package com.ygl;
class Parent2{
static int a=3;
static {
System.out.println("Parent ");
}
}
class Children2 extends Parent2{
static int b=4;
static{
System.out.println("Children extends Parent");
}
}
public class Test5 {
static {
System.out.println("Test5");
}
public static void main(String[] args) {
Parent2 parent;
System.out.println("------------------------");
parent =new Parent2();
System.out.println(Parent2.a);
System.out.println(Children2.b);
}
}
//******************************
Test5
------------------------
Parent
3
Children extends Parent
4
//*******************************************
package com.ygl;
/**
* 只有当程序访问的静态变量或静态方法确实在当前类或当前接口中定义时,才可以认为是对类或或接口的主动使用
* @author lenovo
*
*/
public class Test6 {
public static void main(String[] args) {
System.out.println(Children3.a);
Children3.doSomething();
}
}
class Parent3{
static int a=3;
static {
System.out.println("Parent ");
}
static void doSomething(){
System.out.println("doSomething");
}
}
class Children3 extends Parent3{
static{
System.out.println("Children extends Parent");
}
}
//******************************
Parent
3
doSomething
相关文章推荐
- Java语言注意事项
- java基础:多线程之生产者消费者问题
- 用指定jdk执行jar包
- [java] java 线程join方法详解
- 隐马尔科夫模型的维特比算法java实现,详细原理请自行查看52nlp的
- java实现二叉树的创建及遍历
- Spring基础—装配bean(一)
- 隐马尔可夫训练参数,BaumWelch算法,java实现【参考52nlp的博客算法原理实现】
- Java之final特性简述
- java读取文件——字符流输入和输出
- 浏览器地址传递中文到java后台乱码
- spring+mybatis利用interceptor(plugin)兑现数据库读写分离
- spring+mybatis 物理分页
- java基础之输入输出,数组
- spring与mybatis三种整合方法
- Java的匿名对象
- Java异常捕获之try...catch...finally语句
- Java温习(1)
- java 配置环境变量
- java期末复习之SCJP题库学习笔记