• 02_类与对象——动手动脑


    1、下列代码为何编译不通过

     1 public class test {
     2 
     3     public static void main(String[] args) {
     4         // TODO Auto-generated method stub
     5 
     6         Foo obj1 = new Foo();
     7     }
     8 
     9     class Foo
    10     {
    11         int value;
    12         public Foo(int initValue)
    13         {
    14             value = initValue;
    15         }
    16     }
    17 }

    出现不能编译的主要为第六行,原因是在类中定义了同名的构造函数,但是参数不一样,默认构造函数在有自定义的构造函数后取消作用所致。

    2、

    输出结果为:

    100

    300

    Java进行初始化总共有两个地方,一个是初始化块,另一个则为构造函数,如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。

    3、运行程序

     1 class Root
     2 {
     3     static{
     4         System.out.println("Root的静态初始化块");
     5     }
     6     {
     7         System.out.println("Root的普通初始化块");
     8     }
     9     public Root()
    10     {
    11         System.out.println("Root的无参数的构造器");
    12     }
    13 }
    14 class Mid extends Root
    15 {
    16     static{
    17         System.out.println("Mid的静态初始化块");
    18     }
    19     {
    20         System.out.println("Mid的普通初始化块");
    21     }
    22     public Mid()
    23     {
    24         System.out.println("Mid的无参数的构造器");
    25     }
    26     public Mid(String msg)
    27     {
    28         //通过this调用同一类中重载的构造器
    29         this();
    30         System.out.println("Mid的带参数构造器,其参数值:" + msg);
    31     }
    32 }
    33 class Leaf extends Mid
    34 {
    35     static{
    36         System.out.println("Leaf的静态初始化块");
    37     }
    38     {
    39         System.out.println("Leaf的普通初始化块");
    40     }    
    41     public Leaf()
    42     {
    43         //通过super调用父类中有一个字符串参数的构造器
    44         super("Java初始化顺序演示");
    45         System.out.println("执行Leaf的构造器");
    46     }
    47 
    48 }
    49 
    50 public class TestStaticInitializeBlock
    51 {
    52     public static void main(String[] args) 
    53     {
    54         new Leaf();
    55         
    56 
    57     }
    58 }

    运行结果:

    执行顺序:先执行静态初始化块,然后时初始化块,最后是构造函数

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

     1 public class test_static {
     2     
     3     static int a = 10;
     4     int b = 20;
     5     
     6     static void display_1() 
     7     {
     8         System.out.println("静态变量a:" + a);
     9         System.out.println("实例变量b:" + new test_static().b);
    10     }
    11     
    12 
    13     public static void main(String[] args) {
    14         // TODO Auto-generated method stub
    15 
    16         test_static test = new test_static();
    17         test.display_1();
    18     }
    19 
    20 }

    输出结果:

    静态方法只能调用静态变量,而实例变量想要被调用,必须确定是哪一对象的实例变量,调用方法如第九行。

  • 相关阅读:
    ppt 制作圆角三角形
    ROS 错误之 [rospack] Error: package 'beginner_tutorials' not found
    ubuntu下安装搜狗输入法以及出现不能输入中文的解决办法
    <crtdbg.h> 的作用
    mybatis配置
    POJO、Bean和JavaBean
    类类型与反射
    Spring层面的事务管理
    java项目常用架构
    java 遍历数组的几种方式
  • 原文地址:https://www.cnblogs.com/flw0322/p/9825888.html
Copyright © 2020-2023  润新知