zoukankan      html  css  js  c++  java
  • 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 }

    输出结果:

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

  • 相关阅读:
    网络对抗技术 20181216 Exp6 MSF基础应用
    实验一-密码引擎-加密API研究
    网络对抗技术 20181216 Exp5 信息搜集与漏洞扫描
    网络对抗技术 20181216 Exp4 恶意代码分析原理与实践说明
    网络对抗技术 20181216 Exp3 免杀原理与实践
    用Visual Studio 2019 创建C#窗体项目
    EL表达式的学习
    session学习
    mysql+javaWeb+jdbc+tomcat开发中的中文乱码处理
    java集合
  • 原文地址:https://www.cnblogs.com/flw0322/p/9825888.html
Copyright © 2011-2022 走看看