zoukankan      html  css  js  c++  java
  • 课程作业 03 动手动脑 2017.10.20

    1.

    代码:

    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;

        }

     

    }

    截图:

    2.

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

    public class test

    {

        public static void main(String[] args)

        {

           Foo obj1=new Foo();

        }

    }

    class Foo

    {

        int value;

        public Foo(int initValue)

        {

           value=initValue;

        }

    }

     

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

    3.

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

    代码:

    public class InitializeBlockDemo {

     

        /**

         * @param args

         */

        public static void main(String[] args) {

          

           InitializeBlockClass obj=new InitializeBlockClass();

           System.out.println(obj.field);

          

           obj=new InitializeBlockClass(300);

           System.out.println(obj.field);

        }

     

    }

     

    class InitializeBlockClass{

        //下面这句在初始化块之前与之后,会影响到field字段的初始值

        //public int field=100;

       

        {

            field=200;

        }

        public int field=100;

        public InitializeBlockClass(int value){

           this.field=value;

        }

        public InitializeBlockClass(){

          

        }

    }

    结果:

     

    如果对象中没有形参,则将类中定义的数初始化;如果对象中有形参,则将对象中的数初始化

     

    4.

    请运行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();

          

     

        }

    }

     

    1. 静态初始化块的优先级最高,也就是最先执行,并且仅在类第一次被加载时执行;
    2. 非静态初始化块和构造函数后执行,并且在每次生成对象时执行一次;
    3. 非静态初始化块的代码会在类构造函数之前执行。因此若要使用,应当养成把初始化块写在构造函数之前的习惯,便于调试;
    4. 静态初始化块既可以用于初始化静态成员变量,也可以执行初始化代码;
    5. 非静态初始化块可以针对多个重载构造函数进行代码复用

     

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

    请编写代码验证你的想法。(发表到博客)、

    代码:

    package test;

     

    class test

    {

        int a=1;

        static int b=2;//金泰

        public static void fagnfa()

        {  

           System.out.println("实例变量x = " + new test().a);

            System.out.println("静态变量y = " + b);

        }

        public static void main(String[] args)

        {

           test.fagnfa();

           test test = new test();

           System.out.println("x = " + test.a);

        }

    }

     

    6.

     

    提示:

             使用javap来分析生成class文件,看它调用了Interger类的哪个方法,然后打开JDK源文件查看源码,就可以找到答案。

    在-128~127的Integer值并且以Integer x = value;的方式赋值的Integer值在进行==和equals比较时,都会返回true,因为Java里面对处在在-128~127之间的Integer值,用的是原生数据类型int,会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较,而超出-128~127的范围,进行==比较时是进行地址及数值比较。

  • 相关阅读:
    BeanShell实现写入文件
    LoadRunner11录制APP脚本(2)
    LoadRunner11录制APP脚本(1)
    性能测试 研究方向
    JMeter录制脚本方式(二)
    JMeter常用字符串相关函数
    JMeter中BeanShell用法总结(一)
    第二篇:JMeter实现接口/性能自动化(JMeter/Ant/Jenkins)
    第一篇:JMeter实现接口/性能自动化(JMeter/Ant/Jenkins)
    JMeter设置集合点
  • 原文地址:https://www.cnblogs.com/cts1234/p/7699184.html
Copyright © 2011-2022 走看看