JAVA类与对象(课堂总结)
一:“==”的不同含义
当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等
当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。
测试代码如下:
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类与对象(课堂总结)的更多相关文章
- Java类和对象初始化
类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...
- java类和对象之间的差
java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...
- 危险代码:如何使用Unsafe操作内存中的Java类和对象
危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...
- [Java初探08]__简单学习Java类和对象
前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...
- java类和对象
类是对象的抽象 对象是类的一个实例类 对象 = new 类();拿对象可以操作这个类里的方法 java类与对象的区别是个老生常谈的问题,刚开始学java的时候就开始接触类和对象,今天来总结一下他们之间 ...
- 解析Java类和对象的初始化过程
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...
- JAVA类和对象课后作业
1.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询"你已经创建了多少个对象?" 代码: //显示类 //YiMingLai 2 ...
- Java类与对象的基础学习
1. 请输入并运行以下代码,得到什么结果? public class Test{ public static void main(String args[]){ Foo obj1=new Foo(); ...
- JAVA类与对象作业——动手动脑以及课后实验性问题
一: 1.源代码 //MAO2015.10.6 //foo class Foo { int value; public Foo(int initValue) { value = initValue; ...
- JAVA类与对象(九)------多态
多态是同一个行为具有多个不同表现形式或形态的能力.多态性是对象多种表现形式的体现. 多态存在的三个必要条件: 继承 重写 父类引用指向子类对象 例:Parent p = new Child(); 当使 ...
随机推荐
- strut2读源码记录
首先你得准备一个很简单的struts2的程序,可以发一次请求后能返回一个正确的响应,当然,struts2的源码也要有,我这里用的myeclipse调试的,本来是想用eclipse,因为本人习惯于用ec ...
- Broadcast Reveiver作用
Broadcast Reveiver作用以及为何要引入(用来接收系统以及自定义消息的) 在系统内通知和判定执行状态 1,系统执行状态,开机了,TF卡插拔,准备关机,电量低了, 2,自定义执行状态,发消 ...
- OleDbCommand cmd.Parameters.AddWithValue 添加参数时需要按照存储过程参数的顺序加入
在使用存储过程时,参数出入的顺序要一致.
- as3 Loader程序域
Loader的 load方法有两个参数 第二个参数是LoaderContext对象 LoaderContext对象里有一个applicationDomain( 程序 域)对象 设置程序域对象可以设置两 ...
- ON COMMIT PRESERVE ROWS
定义声明式全局临时表的每个会话拥有自己的独特的临时表描述.当会话终止时,表行和临时表描述均会被删除. 有如下选项,可控制commit后临时表的状态: ON COMMIT DELETE ROWS:在执行 ...
- 使用kettle工具将文本文件的内容插入Linux虚拟机下的mysql表中
一. 解压kettle包 1.把包拷到Linux系统下 还有mysql的驱动包 2.解压zip后缀的包 输入命令:unzip /software/pdi-ce-7.0.0.0-25.zip ...
- Android自定义控件系列(一)—Button七十二变
转载请注明出处:http://www.cnblogs.com/landptf/p/6290791.html 忙了一段时间,终于有时间整理整理之前所用到的一些知识,分享给大家,希望给同学们有些帮助,同时 ...
- 前端 PC端兼容性问题总结
1.如果图片加a标签在IE9-中会有边框 解决方案: img{border:none;} 2.rgba不支持IE8 解决方案:可以用 opacity eg: opacity:0.7;/*FF chr ...
- iOS -不同模拟器字体适配
1.先建立一个UILabel的分类 导入#import <objc/runtime.h>头文件 2.在.m文件中写入如下代码 //不同设备的屏幕比例(当然倍数可以自己控制) #define ...
- CFRound#379(div2)
题目链接:http://codeforces.com/contest/734 A:SB题. #include<cstdio> #include<cstring> #includ ...