Java02-动手动脑及实践性问题

Java字段初始化的规律:

源代码:

public class InitializeBlockDemo {

/**

* @param args

*/

public static void main(String[] args) {

InitializeBlockClass obj=new InitializeBlockClass();

System.out.println(obj.field);

obj=new InitializeBlockClass(300);

System.out.println(obj.field);

}

}

class InitializeBlockClass{

//下面这句在初始化块之前与之后,会影响到field字段的初始值

//public int field=100;

{

field=200;

}

public int field=100;

public InitializeBlockClass(int value){

this.field=value;

}

public InitializeBlockClass(){

}

}

运行测试结果:

public int field=100;

{

field=200;

}

其值为200。

{

field=200;

}

public int field=100;

其值为:100。

总结:当初始化一个对象时,按照类定义中的初始化顺序进行初始化,在定义后部分的初始化内容会覆盖之前的初始化效果。

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

源代码:

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();

}

}

运行测试结果:

总结:

就这个程序而言,执行一个类的构造函数时,要先往上面找,一直找到继承的那个最高级的类,首先执行静态初始化块,从继承的最高级的类执行到当前这个类的静态初始化块(如果有的话),之后仍是按照这个顺序执行每个类的普通初始化块(如果有的话)和每个类的构造函数,之后调用了父类中有字符串参数的构造函数。最后执行当前类最后的一条输出语句。

在静态方法中访问类的实例成员:

源程序:

class Employee

{

String name;

long salary;

short employee_id;

static int total_employees;

static void clear(){

Employee emp=new Employee();

emp.name=”panda”;//增加的内容

emp.salary=99999;//增加的内容

total_employees=0;

}

}

总结:

若想在静态方法中访问类的实例成员,则需要先实例化一个对象,通过对象加点的形式,对属性进行访问。

原文地址:https://www.cnblogs.com/ruangongyouxi/p/9822283.html

时间: 2024-11-29 06:28:56

Java02-动手动脑及实践性问题的相关文章

java02动手动脑

1 编写一个方法,生成一千个随机数,用ppt提供的纯随机数发生器. 做这个题目时,看到老师已经给出Xn+1=(aXn+c) mod Integer.MAX_VALUE;给出了公式自然就算法明了. 我想到了用一个函数的返回值再次作为这个函数的参数,进行一个嵌套的使用,这时候只需要找到X0就成功了,通过翻阅ppt和在网上查询相关资料确定了种子seed,也就是X0的初值. seed=seed = System.currentTimeMillis();就是确定X0的相关语句,最后在主函数中写一个for循

09-异常处理动手动脑及课后实践性问题总结

一.动手动脑:请阅读并运行AboutException.Java示例,然后通过后面的几页ppt了解Java中实现异常处理的基础知识. (1)源代码: import javax.swing.*; class AboutException { public static void main(String[] a) { double i=1, j=0, k; k=i/j; try { k = i/j; // Causes division-by-zero exception //throw new E

Java课堂动手动脑-截图集锦

课堂实践性问题 没有数据类型,名称与类名相同,没有返回值 类本身有自定义的构造方法,调用时应有参数,这时系统不再使用默认构造方法 类字段初始化顺序 1.执行类成员定义时指定的默认值或累的初始化块,执行哪一个看哪一个排在前面. 2.执行类的构造函数 动手动脑问题(类之间继承,创建子类对象导致父类初始化块的执行) 静态初始化执行顺序 1.静态初始化块只执行一次 2.创建子类的对象时,父类的初始化块也会执行 静态方法访问实例成员变量如下:

动手动脑 自信成就人生之课后作业

?动手动脑一 请看以下代码: 上述代码可以顺利通过编译,并且输出一个“很奇怪”的结果: Ljava.lang.Object;@ba8a1dc 为什么会这样? 解释:java的object数组不能转化成string数组,在转换出错时,首先要观察被转换的对象原来是什么类型,或解开多层的包装,直到获取对象的最终类型,然后把不能再分解的类型转换成自己目标类型的对象...(稍微能理解) ?动手动脑二 随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中.

java09动手动脑

一.动手动脑 运行AboutException.java示例 1)源代码 import javax.swing.*; class AboutException { public static void main(String[] a) { double i=-1, j=0, k; k=i/j; try { k = i/j; // Causes division-by-zero exception //throw new Exception("Hello.Exception!"); }

JAVA09异常处理之动手动脑问题

动手动脑1:为什么不管是否有异常发生,finally语句块中的语句始终保证被执行? 我们在写代码时,如果finally块中的代码过多会导致字节码条数"膨胀",因为finally中的字节码会被"复制"到try块和所有的catch块中.finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行. 动手动脑2:CatchWho.java,写出程序运行结果: ArrayIndexOutOfBoundsException/内层try-ca

java动手动脑08

一.动手动脑 1)源代码: public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printValue

JAVA语法基础作业——动手动脑以及课后实验性问题 (七)

一.动手动脑 1)源代码 public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printValue(

java多态动手动脑

实验任务一:多态实现ATM工作原理 1)源代码: package demo; import java.util.Scanner; class A{ String name; String date; String mima; int yu; String kahao; public A(String name,String date,String mima,int yu,String kahao) { this.name=name; this.date=date; this.mima=mima;

动手动脑,无法自拔(3)课时作业6

1.动手动脑(五子棋棋盘排布) (1)源程序 1 import java.io.*; 2 3 public class QiPan 4 { 5 //定义一个二维数组来充当棋盘 6 private String[][] board; 7 //定义棋盘的大小(宏定义) 8 private static int BOARD_SIZE = 15; 9 10 //初始化棋盘 11 public void initBoard() 12 { 13 //初始化棋盘数组 14 board = new String