zoukankan      html  css  js  c++  java
  • Java类与对象的基础学习

    1.

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

    public class Test{

    public static void main(String args[]){

    Foo obj1=new Foo();

    Foo obj2=new Foo(); System.out.println(obj1==obj2);

    }

    }

    class Foo

    {int value=100;}

    结果截图:

    原因:当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等;当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象;引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。

    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字段初始化的规律。

     

    (1)执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

    (2)执行类的构造函数,当有多个构造函数时,要通过参数区分。

    4.当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。请自行编写示例代码验证以上结论。

    //当多个类之间有继承关系时,创建子类对象会导致

    //父类初始化块的执行。

    package demo;

    class Class1

    {

    static

    {

    System.out.println("类1的静态初始化块");

    }

    }

    class Class2 extends Class1

    {

    static

    {

    System.out.println("类2的静态初始化块");

    }

    }

    class Class3 extends Class2

    {

    static

    {

    System.out.println("类3的静态初始化块");

    }

    }

    public class GFS

    {

    public static void main(String[] args)

    {

    new Class3();

    }

    }

    结果截图:

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

     

    (1)静态初始化块只执行一次。

    (2)创建子类型的对象时,也会导致父类型的静态初始化块的执行。

    6.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?请编写代码验证你的想法。

    public class Test{
    int a = 2;//实例变量
    static int b = 3;//类的静态变量
    public static void variable()//静态方法
    {
    System.out.println("实例变量a = " + new Test().a);
    //在静态方法中访问类的实例变量需首先进行类的实例化

    System.out.println("静态变量b = " + b);
    //在静态方法中可直接访问类的静态变量
    }
    public static void main(String[] args)
    {
    Test.variable();
    Test test = new Test();
    System.out.println("结果是 :实例变量 = " + test.a);//访问实例成员
    }
    }

    7.神奇代码。

    public class StrangeIntegerBehavior 

    public static void main(String[] args)

    {

    Integer i1=100;

    Integer j1=100;

            System.out.println(i1==j1);

    Integer i2=129;

    Integer j2=129;        

    System.out.println(i2==j2);

        }

    8.使用类的静态字段和构造函数,跟踪某个类已创建的对象个数。

    代码:

    package demo;

    public class Search {
    static int i;
    public Search()
    {
    i++; //每创建一个类的对象i加1
    }
    static int getNum()
    {
    return i;
    }

    public static void main(String[] args){
    Search s1 = new Search();
    Search s2 = new Search();
    System.out.println("已创建对象个数:"+Search.getNum());
    }

    }

  • 相关阅读:
    无废话WPF系列9: Binding的源
    无废话WPF系列7:WPF布局控件
    无废话WPF系列6:各类控件家族详解
    无废话WPF系列13:路由事件
    无废话WPF系列4: x名称空间
    无废话WPF系列12: 依赖属性和附加属性
    用C++设计一个不能被继承的类
    HMM的介绍及实现
    C语言综合实验3—计算器四则运算
    机器学习基础
  • 原文地址:https://www.cnblogs.com/kt97458/p/4888311.html
Copyright © 2011-2022 走看看