博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
课后作业17.10.19
阅读量:4949 次
发布时间:2019-06-11

本文共 2311 字,大约阅读时间需要 7 分钟。

 

一.请依据代码的输出结果,自行总结Java字段初始化的规律。

class InitializeBlockClass { { field = 200 ; } public int field = 100 ; public InitializeBlockClass ( int value ) { this . field = value ; } public InitializeBlockClass ( ) { }

public static void main ( String [ ] args ) { InitializeBlockClass obj = new InitializeBlockClass ( ) ; System . out . println ( obj . field ) ;
obj=new InitializeBlockClass ( 300 ) ;
System . out . println ( obj . field ) ; }}

输出结果 

100

300

规律:

Java进行初始化的地方有两个:初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。

如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。

 

 

二.请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

class Root
{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public Root()
{
System.out.println("Root的无参数的构造器");
}
}
class Mid extends Root
{
static{
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public Mid()
{
System.out.println("Mid的无参数的构造器");
}
public Mid(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.println("Mid的带参数构造器,其参数值:" + msg);
}
}
class Leaf extends Mid
{
static{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("Java初始化顺序演示");
System.out.println("执行Leaf的构造器");
}

}

public class TestStaticInitializeBlock

{
public static void main(String[] args)
{
new Leaf();

}

}

静态初始化块的执行顺序:

静态初始化块只执行一次。

创建子类型的对象时,也会导致父类型的静态初始化块的执行。

 

三.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

public class ad {

int x = 7;//实例变量
static int y = 8;//静态变量
public static void method()//静态方法
System.out.println("实例变量x = " + new ad().x);
System.out.println("静态变量y = " + y);
}

public static void main(String[] args) 

{
ad.method();
ad ex = new ad();
System.out.println("x = " + ex.x);
}
}

四.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”

package 你已经创建了多少对象;

public class af

{
static int num=0;
public void c1()
{
num++;
}
public void c2(int i,int j)
{
num++;
}
public void c3(double i,double j)
{
num++;
}
public static void main(String[] args)
{
af a1=new af(); /*这里是主函数中创建对象的地方*/
a1.c1(); /*对象1*/
a1.c2(1,2); /*对象2*/
a1.c3(1.1,2.2); /*对象3*/
System.out.println("本类共创建了"+num+"个对象。");
}
}

结果

转载于:https://www.cnblogs.com/lqs244/p/7694300.html

你可能感兴趣的文章
看django的感受
查看>>
词法分析之实验报告
查看>>
IPAdr.exe注册机[PY]
查看>>
Android中在通知栏内常驻应用程序消息
查看>>
5.7安装
查看>>
stl之Map 转载
查看>>
asp.net应用程序生命周期
查看>>
docker的centos7安装与启动相关命令
查看>>
.Net面试题
查看>>
log4j配置参考手册:log4j.properties和log4j.xml两种格式
查看>>
向伟大的张三同志致敬
查看>>
POJ1486 Sorting Slides
查看>>
Vue.js项目模板搭建
查看>>
JS -- The Scope Chain 作用域链
查看>>
C++中堆和栈的完全解析(转)
查看>>
21.Buffer Pool与压缩页/CheckPoint/LSN
查看>>
Dubbo集成步骤
查看>>
js的一些代码…
查看>>
C# abstract,virtual 修饰符
查看>>
java.lang.NoClassDefFoundError: org/hibernate/validator/internal/engine/DefaultClockProvider
查看>>