zoukankan      html  css  js  c++  java
  • 课程作业03-2

    ClassAndObjectTest.java

    代码:

    public class ClassAndObjectTest {

    public static void main(String[] args) {
    //创建类的实例,定义一个对象变量引用这一实例
    MyClass obj = new MyClass();
    //通过对象变量调用类的公有方法
    obj.myMethod("Hello");
    //给属性赋值
    obj.setValue(100);
    //输出属性的当前值
    System.out.println(obj.getValue());
    //直接访问对象公有字段
    obj.Information = "Information";
    //输出对象公有字段的当前值
    System.out.println(obj.Information);
    }
    }

    /**
    * 自定义Java类的示例
    */
    class MyClass {
    // 公有字段
    public String Information = "";

    // 自定义公有Java实例方法
    public void myMethod(String argu) {
    System.out.println(argu);
    }

    // 定义属性:私有字段+get方法+set方法
    private int value;
    public int getValue() {
    return value;
    }
    public void setValue(int value) {
    this.value = value;
    }

    }

    结果截图:

    进行试验:请输入并运行以下代码,得到什么结果??

    结果截图:

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

     

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

    进行试验:使用上页幻灯片中定义的类,以下代码输出结果是什么?

    运行结果有两部分:

    ①“public int field = 100;”在“{field=200;}”之前

    ②“public int field = 100;”在“{field=200;}”之后

    请依据代码的输出结果,自行总结Java字段初始化的规律:

    所有类的变量都默认初始化为null,数字类的原始数据类型默认初始化为0,boolean默认初始化为false,。

    动手动脑:

    请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

    代码:


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

    }
    }

    结果截图:

    静态初始化块的执行顺序:静态初始化块只执行一次。创建子类型的对象时,也会导致父类型的静态初始化块的执行。

    有趣的问题:

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

    代码;

    public class Test {

    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    test1.ceshi();

    }

    }

    class test1{
    int example1=1;
    static int example2=2;
    public static void ceshi(){
    System.out.println("example="+new test1().example1);
    System.out.println("example="+example2);
    }
    }

    结果截图:

    装箱和拆箱:

    BoxAndUnbox.java

    代码;


    public class BoxAndUnbox {

    /**
    * @param args
    */
    public static void main(String[] args) {
    int value=100;

    Integer obj=value; //装箱

    int result=obj*2; //拆箱

    }

    }

    问题:Integer类的装箱和拆箱到底是怎样实现的?

    解答:装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 intValue方法实现的.

    上述神奇代码(StrangeIntegerBehavior.java)输出诡异的结果,原因何在?

    因为它们调用的Interger类的方法不同

  • 相关阅读:
    MVP模式与MVVM模式
    webpack的配置处理
    leetcode 287 Find the Duplicate Number
    leetcode 152 Maximum Product Subarray
    leetcode 76 Minimum Window Substring
    感知器算法初探
    leetcode 179 Largest Number
    leetcode 33 Search in Rotated Sorted Array
    leetcode 334 Increasing Triplet Subsequence
    朴素贝叶斯分类器初探
  • 原文地址:https://www.cnblogs.com/tianzeyangblog/p/7698468.html
Copyright © 2011-2022 走看看