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

}

Java类与对象的基础学习的更多相关文章

  1. java类和对象的基础(笔记)

    在Java类的设计中,有时希望一个类在任何时候只能有一个实例.这时可以将该类设计为单例模式(singleton).要将一个类设计为单例模式,需要把类的构造方法的访问修饰符声明为private,然后在类 ...

  2. [Java初探08]__简单学习Java类和对象

    前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...

  3. java 类与对象基础整理

    之前学习javaSE的时候,没有针对性地对对类与对象的一些基础进行整理,下面这些内容是笔记内容整理后的,希望以后自己可以通过这些博客时常复习! 一.类and对象的基础 类似于类的生命啊,类与对象的关系 ...

  4. java类和对象之间的差

    java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...

  5. Java类和对象初始化

    类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...

  6. 危险代码:如何使用Unsafe操作内存中的Java类和对象

    危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...

  7. java类和对象

    类是对象的抽象 对象是类的一个实例类 对象 = new 类();拿对象可以操作这个类里的方法 java类与对象的区别是个老生常谈的问题,刚开始学java的时候就开始接触类和对象,今天来总结一下他们之间 ...

  8. JAVA 类和对象基础知识详解

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 和C++一样,JAVA也是一门面向对象的语言,其基础和核心是类和对象.而面向对象的思想是来源与显示生 ...

  9. 学习笔记——Java类和对象

    今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...

随机推荐

  1. LeetCode 171 Excel Sheet Column Number

    Problem: Given a column title as appear in an Excel sheet, return its corresponding column number. F ...

  2. ASINetworkQueues(经典2)

    ASINetworkQueues, 它的delegate提供更为丰富的功能 提 供的更多的回调方法如下: a,requestDidStartSelector,请求发起时会调此方法,你可以在此方法中跟据 ...

  3. 股票交易(洛谷U6084)

    题目背景 kkk最近迷上了炒股. 题目描述 kkk炒了N天股,第i天的股价为a[i]元.kkk希望股票每天都上涨1元钱,但是操盘手lzn并不想让kkk赚很多钱导致他亏本,于是a[i]相对a[i-1]就 ...

  4. 《CLR via C#》读书笔记(5)基元类型、引用类型和值类型

    5.1 基元类型 编译器直接支持的数据类型称为基元类型(primitive type). 以下4行到吗生成完全相同的IL int a = 0; //最方便的语法 System.Int32 b = 0; ...

  5. 重温WCF之消息拦截与篡改(八)

    我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借 ...

  6. Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……

    接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...

  7. 【翻译二十】-java线程池

    Thread Pools Most of the executor implementations in java.util.concurrent use thread pools, which co ...

  8. 解决MYSQL错误:ERROR 1040 (08004): Too many connections

    方法一: show processlist; show variables like 'max_connections'; show global status like 'max_used_conn ...

  9. Could not link against boost_system 解决办法

    Could not link against boost_system 解决办法: 先安装 libboost-all-dev ./configure --with-incompatible-bdb - ...

  10. memcached的最佳实践方案

    基本问题 1.memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 ...