• 课后作业及动手动脑


    动手动脑1

     以下代码为何无法通过编译?哪儿出错了?

    public class Test {

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

    Foo obj1=new Foo();

    }

    class Foo()

    {

      int value;

      public Foo(int intiValue)

      {

      value =intivalue;

      }

    }

    }

    结论:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

    运行试验

    public class shi {

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

    IntializeBlockClass obj=new IntializeBlockClass();

    System.out.println(obj.field);

    obj =new IntializeBlockClass(300);

    System.out.println(obj.field);

    }

    }

    class IntializeBlockClass{

    {

    field =200;

    }

    public int field=100;

    public IntializeBlockClass(int value){

    this.field=value;

    }

    public IntializeBlockClass(){

    }

    }

    结果:

    java字段初始化规律:类成员定义时指定执行的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”;执行类的构造函数;类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

    动手动脑2://The program of java

    //LinLinHe,Oct,15,2015

    public class Jicheng {

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

    Son f=new Son();

    f.output();

    }

    }

    class Father{

    int x=10;

    Father()

    {

    }

    Father(int newx){

    x=newx;

    }

    }

    class Son extends Father{

    int y=0;

    Son()

    {

    }

    Son(int newy){

    y=newy;

    }

    void output()

    {

    System.out.println(x+"  "+y);

    }

    }

    结论:当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

    动手动脑3:

    public class Test {

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

    new Leaf();

    }

    }

    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的构造器");

    }

    }

    静态初始化块的执行顺序:先执行静态初始化块,再执行普通初始化块,然后执行无参数的构造器。

     

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

    public class Cheng {

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

    Test t=new Test();

    t.getY(1);

    t.I();

    }

    }

    class  Test

    {

    int x=0;

    static int y;

    static public int getY(int newy)

    {

    y=newy;

    System.out.println(y);

    return y;

    }

    public int I()

    {

    int i=10;

    return i;

    课后作业://The homework of java

    public class Inquiry {

    private static int i;

    public Inquiry ()

    {

     i++;

    }

    public  static int get()

        {

         return i;

        }

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

    Inquiry t1=new Inquiry();

    Inquiry t2=new Inquiry();

    Inquiry t3=new Inquiry();

    System.out.println("共创建了"+Inquiry.get()+"个对象");

    }

    }

    }

    }

  • 相关阅读:
    linux grep命令
    PHP 利用simplexml_load_file 读取XML对应的字段 然后存入mysql数据库
    php 设计模式之单类模式
    Mac C#开发工具Rider安利与环境配置教程
    模拟,贪心,枚举(二)
    模拟,贪心,枚举
    10.10 review
    review 10.9
    10.6 review
    9.28 review
  • 原文地址:https://www.cnblogs.com/muamu/p/4885609.html
Copyright © 2020-2023  润新知