动手动脑10.13

一:

程序无法运行,因为类提供了一个自定义的构造方法,导致系统不再提供默认构造方法。

二.

public class Test {
    public static void main(String[] args){
        Foo obj1=new Foo();
        Foo obj2=new Foo();
        System.out.println(obj1==obj2);
    }
}
class Foo{
    int value=100;
}

对象变量不能判断相等。

三.

public class Text {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        InitializeBlockClass obj=new InitializeBlockClass();
        System.out.println(obj.field);

        obj=new InitializeBlockClass(300);
        System.out.println(obj.field);
    }
}
class InitializeBlockClass{
    {
        field=200;
    }
    public int field=100;
    public InitializeBlockClass(int value)
    {
        this.field=value;
    }
    public InitializeBlockClass()
    {}
}

初始化第一次是用了类的初始化块,第二次用了public的int初始化,所以第二次覆盖了第一次,输出了100; 在main函数中给类InitializeBlockClass赋初值300,所以覆盖100,输出300;所以类的初始化有类的初始化块,还可以直接在类中赋值,还可以用一个函数为类的属性赋值,还可以构造函数。

四.当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。创建主类对象的时候,也把主类的父类初始化块执行了。

五.

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

    }
}

静态块在第一个对象创建时运行,初始化块在每个对象创建时运行,区别是静态块只执行一次,操作的内存在静态区,初始化块每个对象构造时都需要执行一次,操作的内存在用户区.
六.

public class Testa{
    protected String alpha;
    public void dt()
    {
        System.out.println("abcd");
        }
    public static void main(String[] args)
    {
        Testa t = new Testa();
        t.dt();
        }
    }

在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。如果静态方法中必须要调用非静态方法,可以先new(实例),之后通过new实例化的引用调用此类的方法。

时间: 2024-12-29 09:25:58

动手动脑10.13的相关文章

java的动手动脑10月20日

(1)动手动脑 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { /*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubInitializeBlockClass obj=new InitializeBlockClass();System.out.println(obj.field)

动手动脑10.14

一. public class Suiji{ public long a=12345L; public long c=12345L; public long m=456123L; public long r=1; public long rand() { r=(r*a+c)%m; return r; } public static void main(String[] args) { Suiji s=new Suiji(); long r; for(int i=1;i<1000;i++) { r

第七周动手动脑(2018.10.29-11.4)

动手动脑1: 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大! 运行截图: 结论:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句. 动手动脑2: 请自行编写代码测试以下特性: 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. package ceshi; class Animal { pub

2018/10/21动手动脑及类的创建

关于类的调用次数,大体使用静态变量来实现. 代码: package yds; import java.util.Scanner; class Number{static int sum;public Number(){ sum++;}int Sum(){ return sum;}}public class duixiangsum { public static void main(String[] args){ Scanner scan=new Scanner(System.in); Numbe

10月14日课堂动手动脑

动手动脑 一.为何下面的代码无法编译 public class D1 { public static void main(String[] args) { //int a=1; Foo f=new Foo(); //System.out.println(f.value); } } class Foo{ int value; public Foo(int i) { value=i; } } 原因是当类中有自己定义的构造函数时,初始化时要传参进行初始化. 如果类提供了一个自定义的构造方法,将导致系统

动手动脑,无法自拔(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

动手动脑7

动手动脑 1.TestInstanceof.java 2. 3. 原因: 第一个创建一个Parent对象,调用的是父类构造方法 第二个创建一个Child对象,调用的是子类的构造方法 第三个将子类child的值赋给了parent,调用的是子类的构造方法 第四个parent.myValue++是对父类中的变量进行自加运算,而parent.printValue()实际上调用的还是子类的构造方法 第五个((Child)parent).myValue++是将parent对象强制转化成Child,所以指向的

动手动脑,第六次Tutorial——数组

动手动脑,第六次Tutorial--数组 这次的Tutorial讲解了Java中如何进行数组操作,包括数组声明创建使用和赋值运算,写这篇文章的目的就是通过实际运用已达到对数组使用的更加熟练,下面是实践代码之后的感悟与总结: 动手动脑1:PassArray.java 1 // PassArray.java 2 // Passing arrays and individual array elements to methods 3 4 public class PassArray { 5 6 pub

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

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