一:“==”的不同含义

当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等
当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。

测试代码如下:

package test;

public class qq {

	public static void main(String[] args) {
// TODO Auto-generated method stub
Foo obj1=new Foo();
Foo obj2=new Foo();
System.out.println(obj1==obj2); } }
class Foo{
int value=100;
}

结果是false。

分析:例子中含义是判断这两个变量是否引用同一对象,因为例子中定义的是两个不同的对象,所以返回false。

二:类的构造方法

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

package test;

public class qq {

	public static void main(String[] args) {
// TODO Auto-generated method stub
Foo obj1=new Foo();
} }
class Foo{
int valud;
public Foo(int initValue)
value=initValue;
}

分析:程序报错,原因因为自定义了构造方法,系统不再提供默认构造方法。

三:静态初始化块的执行顺序

源代码:

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

结果截图:

aaarticlea/png;base64,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" alt="" />

分析:

首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。

四:在静态方法中访问类的实例成员

源代码:

package test;

public class qq
{
int x = 3;//类的实例变量,初始化值为3
static int y = 4;//类的静态变量,初始化值为4
public static void method()//静态方法
{
System.out.println("实例变量x = " + new qq().x);//在静态方法中访问类的实例变量需首先进行类的实例化
System.out.println("静态变量y = " + y);//在静态方法中可直接访问类的静态变量
} public static void main(String[] args)
{
qq.method();
qq ex = new qq();
System.out.println("x = " + ex.x);
}
}

五:Java字段初始化的规律

源代码:

package test;

public class qq {

	public static void main(String[] args) {
// TODO Auto-generated method stub
InitialzeBlockClass obj=new InitialzeBlockClass();
System.out.println(obj.field);
obj=new InitialzeBlockClass(300);
System.out.println(obj.field);
} }
class InitialzeBlockClass{
{
field=200;
}
public int field=100;
public InitialzeBlockClass(int value){
this.field=value;
}
public InitialzeBlockClass(){ }
}

实验结果截图:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAA3CAIAAABvppjUAAABN0lEQVR4nO3YzY2DMBQA4VeXC6IeV0MzLmb3kADGP0s0hyQr5rvFXNCIJzuOHyHx6Rf4rwwHGQ4yHNSEKzlFRCxrvxYRKZc/F++kDrcukXIpOdXh1mXveDwZLt5LP6rnEo+Y+4NHr+HizVyE23+sS0TK+fxN1ovvfOlv8FK4fTLrYW4W3/nS3+CFUY3TXD5HtV+8matw9fd0bAnDxXtpdtWTat/0ONLyAAwZDjIcZDjIcJDhIMNBp3DVQe7qyOY5brhactqCeK00Ng/X/bnyWqnWhNuGtfsH77VSY7I5bLPotdLMbFfdanitNDH/4o7NwWulgcm1Uj17HkdGPABDhoMMBxkOMhxkOMhwkOEgw0GGgwwHGQ4yHGQ4yHCQ4SDDQYaDDAcZDjIcZDjIcJDhIMNBhoMMB/0CtBRQe2cauX4AAAAASUVORK5CYII=" alt="" />

分析(Java字段初始化规律):所有类的变量都默认初始化为null,比如String a; Integer b;数字类的原始数据类型默认初始化为0,比如int a; short b; char c;boolean默认初始化为false;

类加载时直接初始化静态字段;

类加载时调用静态方法初始化静态字段;

实例化对象时,在调用构造函数之前代码块中初始化字段;

实例化对象时,在调用构造函数之时初始化字段;

JAVA类与对象(课堂总结)的更多相关文章

  1. Java类和对象初始化

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

  2. java类和对象之间的差

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

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

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

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

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

  5. java类和对象

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

  6. 解析Java类和对象的初始化过程

    类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...

  7. JAVA类和对象课后作业

    1.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询"你已经创建了多少个对象?" 代码: //显示类 //YiMingLai 2 ...

  8. Java类与对象的基础学习

    1. 请输入并运行以下代码,得到什么结果? public class Test{ public static void main(String args[]){ Foo obj1=new Foo(); ...

  9. JAVA类与对象作业——动手动脑以及课后实验性问题

    一: 1.源代码 //MAO2015.10.6 //foo class Foo { int value; public Foo(int initValue) { value = initValue; ...

  10. JAVA类与对象(九)------多态

    多态是同一个行为具有多个不同表现形式或形态的能力.多态性是对象多种表现形式的体现. 多态存在的三个必要条件: 继承 重写 父类引用指向子类对象 例:Parent p = new Child(); 当使 ...

随机推荐

  1. spring添加通知配置

    在项目里添加的spring配置文件 <bean id="beforeMethod" class="com.wxw.core.common.AdviceBefore& ...

  2. idea远程调试linux下的tomcat

    要远程调试代码,首先的保障本地的代码和远程tomcat的代码是同一份 首先在本地idea配置一个远程tomcat服务器 host就填写远程主机ip port填写访问的端口(不是调试端口) 然后在Sta ...

  3. Python json解析

    #encoding: utf-8 ''' Author:Siukwan ''' import sys reload(sys) sys.setdefaultencoding('utf8') import ...

  4. php_Symfony_项目实战全过程记录

    今天是2017年1月8号,正式接收到一个Symfony 的项目,准备全程记录遇到的问题及解决方法,之前被通知学习该框架,只是一直没有机会做项目,今天终于可以做了,希望2017把Symfony学的能会使 ...

  5. 【.NET】电话号码打星号(隐藏部分)

    描述:支持多个电话: //隐藏部分内容,支持一个值有多个联系方式,用逗号隔开.//参数:value - 值,subIndex - 从第几位开始,subQty - 隐藏几位数 protected str ...

  6. 下载一个应用程序,华硕手机秒变3D扫描仪

    近日,新奥尔良的3D开发先锋Scandy对外发布消息称,其取得了一个重大的突破.这次使用的是硬件巨头华硕的智能手机.该公司新的Android设备(华硕ZenFone AR)被Scandy变成一个借助开 ...

  7. ORM了解

    1.hibernate通过读取Hibernate.cfg.xml文件创建SessionFactory,并通过SessionFactory创建Session(开始使用要打开,使用结束要关闭);通过Ses ...

  8. 使用pycharm+pyqt5 调取界面程序

    一.使用QtDesigner制作界面 1)打开的界面设计工具QtDesigner,如图: 2)新建窗体,选择Main Window: 3)分别在窗口添加如下控件,Calendar.3个pushButt ...

  9. openSuse快捷键

    1.printscreen全屏截图 2.ctrl+printscreen窗口截图 3.shift+printscreen选择截图 4.Ctrl+Alt+up arrow.Ctrl+Alt+down a ...

  10. javascriptDOM对象之scrollTo()方法,滚动到页面指定位置

    scrollTo是一个神奇的方法,常用于篇幅过长的页面,制作一个回顶部的按钮,我这里简单的实现以下 当然没有一个过渡的js效果 scrollTo(xpos,ypos) 参数 描述 xpos 必需.要在 ...