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(); 当使 ...
随机推荐
- android 视图设置多个setTag数据
1)在string.xml 文件中添加 <item tyoe="id" name = "tag_first" /> <item tyoe=&q ...
- 使用Bundle在Activity之间交换数据
一:在main.xml文件中设置布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...
- app wap开发mobile隐藏地址栏的js
function scrolltol (){ setTimeout ( function () { , ) }, ); } window . onload = function () { if ( d ...
- HTTPCLIENT抓取网页内容
通过httpclient抓取网页信息. public class SnippetHtml{ /** * 通过url获取网站html * @param url 网站url */ public Strin ...
- 链方法[C# 基础知识系列]专题三:如何用委托包装多个方法——委托链
最近研究链方法,稍微总结一下,以后继续补充: 弁言: 上一专题分析了下编译器是如何来翻译委托的,从中间语言的角度去看委托,希望可以帮助大家进一步的理解委托,然而之前的分析都是委托只是封装一个方法,那委 ...
- Linux centos7环境下安装MySQL的步骤详解
Linux centos7环境下安装MySQL的步骤详解 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执行 ...
- 聊聊数据库(MySql)连接吧,你真的清楚吗?
前言 说到数据库连接,这个大家都很熟悉了.但是熟悉一般来自于下面三种情况 * 刚开始学编程的时候,老师就说用完的数据库连接一定要关闭,不然会有严重的后果. * 编程一段时间后,大家都说要用连接池来优化 ...
- 【BJG吐槽汇】第2期 - 我每周1-2次迟到都是因为你-->ios10!
本期槽点嘉宾:苹果系统 ios10 小吐我记得iphone是在2008年出的,当时我还在用诺基亚N70,对iphone是十分的陌生,想必大家也是,直到iphone4的时候,黄牛成群,饥饿营销,包括出i ...
- C#中yield关键字理解
yield关键字之前用得较少,但是在做项目开发的过程中也遇到了,当时有点迷惑,就顺便研究学习了一下,以下是个人理解,不到之处欢迎拍砖!废话就到这,上代码: class Program { static ...
- jmeter连接数据库
新建一个 Thread Group: 新增 JDBC Connection Configuration: 点击新增的 JDBC Connection Configuration ,需要修改的参数包括: ...