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());
	}
}
Java类与对象的基础学习的更多相关文章
- java类和对象的基础(笔记)
		在Java类的设计中,有时希望一个类在任何时候只能有一个实例.这时可以将该类设计为单例模式(singleton).要将一个类设计为单例模式,需要把类的构造方法的访问修饰符声明为private,然后在类 ... 
- [Java初探08]__简单学习Java类和对象
		前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ... 
- java 类与对象基础整理
		之前学习javaSE的时候,没有针对性地对对类与对象的一些基础进行整理,下面这些内容是笔记内容整理后的,希望以后自己可以通过这些博客时常复习! 一.类and对象的基础 类似于类的生命啊,类与对象的关系 ... 
- java类和对象之间的差
		java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ... 
- Java类和对象初始化
		类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ... 
- 危险代码:如何使用Unsafe操作内存中的Java类和对象
		危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ... 
- java类和对象
		类是对象的抽象 对象是类的一个实例类 对象 = new 类();拿对象可以操作这个类里的方法 java类与对象的区别是个老生常谈的问题,刚开始学java的时候就开始接触类和对象,今天来总结一下他们之间 ... 
- JAVA 类和对象基础知识详解
		/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 和C++一样,JAVA也是一门面向对象的语言,其基础和核心是类和对象.而面向对象的思想是来源与显示生 ... 
- 学习笔记——Java类和对象
		今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ... 
随机推荐
- ListView之BaseAdapter的使用
			话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView.GridView.Gal ... 
- You know元音字母吗?
			所谓元音字母,或者母音字母,就是语言里起着发声作用的字母.在英语中,A.E.I.O.U属于元音字母,其中U是半元音开音节和闭音节为数不多的5个元音字母看似简单,他们却能像变戏子一样跟辅音组合拼读成不同 ... 
- 51nod 1449 砝码称重(贪心算法)
			题目:传送门. 题意:中文题. 题解:左物右码,w进制.m%w==0||m%w==1||m%w==w-1都是可以的,否则是NO. #include <iostream> #include ... 
- September 23rd 2016 Week 39th Friday
			Even a small star shines in the darkness. 星星再小,也会发光. In the darkness, even a small star can shine. N ... 
- idea 用maven骨架生成项目速度慢的问题
			使用mvn archetype:generate命令时,加上-DarchetypeCatalog=local archetypeCatalog=local 
- MongoDB csv文件导入导出
			1.导出到csv文件: 2.从csv导入: 数据经过csv导出导入,有一个非常隐蔽的问题,编写代码时需要注意: 先导入一条数据: 其中Price是double类型: 然后我把该条记录导出到Demo.c ... 
- yum -y list java*  查看当前java的版本
			[root@NB ok]# yum -y list java* Loaded plugins: fastestmirror, refresh-packagekit, security Loading ... 
- jQuery - 9.Ajax
			9.1 Ajax 的 XMLHttpRequest 对象 9.2 JQuery中的Ajax 9.2.1 load()方法 9.2.2 $.get() 9.2.3 $.post() 9.2.4 $.ge ... 
- WPF控件
			1:内容控件(Content Controls)2:条目控件(Items Controls)3:文本控件(Text Controls)4:范围控件(Range Controls) 一:内容控件 内容控 ... 
- Linux下Vi/Vim使用笔记
			启动和关闭vim vi 打开 Vi/Vim 打开 Vi/Vim 并加载文件 <file> vi <file> vim编辑器的三种模式:一般模式.编辑模式和命令行模式在一般模式中 ... 
