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,iVBORw0KGgoAAAANSUhEUgAAAQgAAACcCAIAAAAMFKJJAAAMT0lEQVR4nO2dzaHrKAyFXcxUQQfTiLbTirbTiDqYKlQMs+BPgOzk5trOs32+xXu5jv+ScEDAQV4iAGBi2eEUheE1ANdlzxIMPYDbAGEA4FCLslANg5bA+sGp9J//IsmO9wbA17DCyHpQDh9JwxWGcsjbhIaTKhOriKR3VKcrTkesbixvlcsLLcOd5C3KNBxdt7Q7BcATRlQOtVwph9KOtGIzbUwbYut8p1PV/UiicN7EUt8JIQRiYlEOIXAR0OJBYt4KRKF/K8ZyhfJKRZoEynvl8k2FeUt9IQJ1AFcYQra8W7UE1pWNMXotRi6bwizMnFXS9mdiVSZmWgKLMneVuTKLV0yFU/NSSnRSAYdlCSEsS2CmdvfzK5YolFVoBP7bOBLcDK+P4bUcsUQj7sa0+7owAjFLK5m5HLNwyE2LiKbdtJ13CaxGpeZ6wiRa2x42JxZmUU2fJZgGhGuLQaGPmIYWo/4Jns3UYuQyWyKh3wnDNhKpB1D6AcIsTMwcwiDIdJDtEAi1UIq4vC1WaTkEyq1HkUqgUtRzKGXixXaPtS1L98DzPuB5rHS+U2n/WSgV//439kWqhVJ1a3ktlFqMHOGIaA78VURVVYhYKFDXKKgOQrAnr/Kplb65rjBRWBbi2j5oDejSR1Bm6bol4NF4ne8ax0QbYZky726Mcfnrn9BX/hvCyC2GNGG0s7e+ekwKaONNJWRqA1Bdl1sosLjC6Drf+UXTdW6ctMR24OkcOsGXQymrsa48pzjMyDDGWpeviC+HPrVBq0NS5AykhUkY9byBRU1L0/b8dLAa3AvMfAPgAGEA4ABhAOAA2zkADijBADi8IQw7+OO8BecduCFFGHbMdFAChAGeRxaGcggh1MkuovcmujphwGEO7oMRBgtT8UaUGeA6zTYY7ybTNxzm4FY0YZDE5AFPTkE7Fz35Bsufxs8Nhzm4E1kYNfwI5f9VYVhTlSMMOMzBHeiFUen+fksYcJiDO/FzYVhLainXcJiDm5GFMQ67mtBq7BZ3He0qIDjMwa3Ya+YbDnNwK2AJAcABwgDAAcIAwAHCAMABwgDAYV9heKNEAFyQJowdBvad2WYALsmewvBWZ8CLDi7JK2F42c6tW3yYC1+dIocXHVyKbWHYmteLk2YXVW9nhRcdXJRNYYwFp7zfVervCANedHAxNoXhd6ZXHjHjCQNedHBRXoZSXnfa9QpuhlLwooNr0Qlj7j53W6dIKjCvr9uI8KKD63LozDe86OCqwBICgAOEAYADhAGAA4QBgAOEAYADhAGAg31q6y/tQkh9Du7DynO+P5GGK4wN23k7oneJ58m2FUMWbOfgDLznfNsS7tnO542TTdXanhbHdl5shMkrFVj72T+RYhDJM9LDpB9s5+BgHGE0g5RtO+prd2P5o69zX9vOmVmTkdwW4+Qqz7uH0Ad3sJ2DE/D6GL53Nkcj7kZv97hhO2+HZ2GIiLbzLwtJcYGnsMo6OmA7B8cztRg5ximR0O+EsWY7d6tqKvFTcth2u9TH2MB2Dk5hpfO9VJfe+6HUXOw23LXD676iTsIwFXjaE7ZzcBpe59v6XV2T67rztfe1vhKGO+6kHAKRiXfGMSvYzsHxfMt2HuNKi1Fq7TEnQmukYDsHx4OZbwAcIAwAHCAMABwgDAAcIAwAHCAMABxgOwfA4Vu28zVTSLfDnARdRPJEHsnkE9+wuLcJvuEYk+dK7eRjOkupJtqr978OcGm+ZTuP7bpzKzMlPDfT4CLCRKkYt/yEr66VfYT2PktGOZFh8UdLYy2d1Qr+wifxRdt5vm6tpgen0mAeyd5DIlqWhYhDSIb0JaRU0OvXyoWe2ORTH7xZ/lKMPCfOTCKYD38YX7Kd26uVtM6BKNmgcsXNc2OlQizCzMKaF2WUFXlbFvdkv2KSGn6ZpOsLsQgnuVG7XNkzJdGlsuYDnaiH8B3beSPV8H1pSymezUqM+kwA7v8RMe3N+rVUhNPqprokqrUY2bhbHsbRNyX108FB9TS+aTuvHtdSsZdwP4RQurzUOhP5esRVgLaPvX6t2q/Oj3EiIiNGI4x6R7G0W5SegyZcWwyo4yF813Ye+kJZOhl1zEk5hEDVCFsuTkSBVZmMPX37WvOAU46TFmImVhVqfffueGWWbm0IeARfsp33FvQyGkosJZhLLcbYUTdPkLGr+mTzWrEut2gnycKtA1qBRCe5C4eyiCkMmgF3BzPfADhAGAA4QBgAOEAYADhAGAA4vCGMjRlfGGrBTSnCsE+IHJQAYYDnkYWhyZRXciwRvZdfqRMGEpuD+2CEUZ0PLDXxWC2yQ77XKdc4EpuDW9GEQRKVKeUK7zPyzb7BupihpRFHYnNwJ7Iw2oKH8v+qMKypyhEGEpuDO9ALo9L9/ZYwkNgc3ImfC8NmQg6tj4HE5uBOZGGMw64mtBpq+th1tNtKHiQ2B3dir5lvJDYHtwKWEAAcIAwAHCAMABwgDAAcIAwAHGA7B8ABtnMAHE6wnSOxObgeJ9jOK0hsDi7DObbzfCASm4OrcLztHInNwQU53HZuzonE5uAynGQ7rx5XJDYHl+A02zkSm4MrcbztHInNwQWBJQQABwgDAAcIAwAHCAMABwgDAAfYzgFwgO38GljrI2YeT+CkbOdpdiGbPkYpfWA7P9db3vK6zf7g33jmPbvxK5wMi5+zbz75Zu3hdRmPU8LdTVR/W/k2J/P1aZXCCbbznF62GAhLQmaT6mmeXI9xw3YeT/SWD/eXPoUpMh/cvDJLUWb+Un6gj/F57PPP0D+Qffgdl37idVl2zCevzMxcTG05h72aKKSUj1Qg0hxv+mok2RFKnZUzcX+TM2znqqZC7b+vfMYf2c7P95Z7ed0+vPlSQWbriXot6CZ+i6HGVNYJx23hjH73yydvhSEciuhDJ6J8T+0z54InSSRvPLhkDAOO4njbefuaTSWZvswPbeene8u9FLkf3rwyE7Ma1f7wl+6E4WU+rTt0P5ubI3XnfPJWGLlZdpMLD3JVZW4tBXUWoBnic7IOn2M7Nwmb1VpoP7Sdn+0tX2kxPrh5Fcldn8mu9eZQhvn6zUt7aK7VbOXm7bl/PnkVkQ1h1I5HKC9t2LbyVK0Wypy8rvIc23mfybwV4o9s5wd4y9d6tMWuSKL9hvRLfuKZL3f4sxbDRiI2jnWNlLnDGDrFjXsekE8+K6IKw9RLtkz3H7h89eZb6dcp5/Ggzd/pAM6xnTdh8JDu+RPbeZxL0y+95RujM+ndUDKk9098+ujmP2sxyv6dxLo6eOgG9km1/T33zCffcnTXqqmq2O2713ugVs0S9dMGtQ6oqzfPajVOynaemCrHz2zn/UDhod5ypx9iH3H50c3nCncInb8yCrNnPvlhhWWN90SsLkyLF9vp+rGQEraJ6Hi284AlBAAHCAMABwgDAAcIAwAHCAMAh32FsemdAOA6NGHo7x9jeuL8CwCHsqcwvAmqLS96PaCfdy8mC98jsK9Tup+WwNISUHglDDP37RrShrnw1Sny0Yuep22Yswe9mxIUkeLCzQ/lVu0uvJtTejaPjJZc8Ey2hWFrXi9Oml1UvW9yMwW6MiWjZrUC1uO0zk4XN27vNNnJKT3pGb0jkNkUxlhw3NVF7wjDSUueKBZUEdGkwuJMLH6m5l0tl97TKT0bfpCcE8T4Qhh+Z3rF7ewJY82L7lbVJNXsJKL9Ls1vtK9TutiFzIUYIwjgjVDK606vpo1dDaU8y61jvzXHdRV4Nmzu75RuH0eZRc9ZAwMuQCeMufvcbZ0iqcHt/GNhuBFZWp5nbdrDmNV+Tmm7tKT4ytFagBgPnvl+4UV3W4zq6h/WNbbobT+ndNvQeZ4RSgFYQgDwgDAAcIAwAHCAMABwgDAAcPgThAGzOvjj+K0wYFYHt8QKoz5FfvJmj57s5v0+3ax+bp5z8FQ6YQy+1UqXE2syDp5oVo/VEWiPLZP0++Y5B4+mZTvPUX7Nvty5U3XK4dkq7vPM6ufnOQdPpW8xQqgp6rsCJ7QElu6pGKxrwjjSrH52nnPwVPoWo6yHICsM5dBcqXMVfZ5ZPZ6f5xw8lbGPEWMUEaGQKmtVjUO346UwjjOrH5DnHACXSRidoZulthrrwpi7z0ea1XfOcw6ASxFGTcLeLX0Ixuxdjd5HV7WbZvXT8pyDZ/MnzHwD8McBYQDgAGEA4ABhAOAAYQDgAGEA4ABhAOAAYQDg8D/kV2h0gosnwAAAAABJRU5ErkJggg==" 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(); 当使 ...
随机推荐
- 看完这篇文章才对【GIT】有了大彻大悟的认识
git定义:版本管理工具 历史:没有git的时候,我们修改完一个文件,要先把文件拷贝一个副本到备份文件夹中,还要建个文档来记录当前文件的信息和操作记录.当文件多的时候,人工操作起来将是个非常辛苦非常庞 ...
- 开发人员如何上google查资源,如果浏览国外资源方法
启动浏览器后15秒左右,浏览器的右上角就会出现图标 启用防火墙功能(右上角墙形图标),这时候程序就会去寻找网上代理,从而达到访问GOOGLE的效果,提示如果不访问google网站,可再点击一下关闭防火 ...
- 微信企业号 JS-SDK:上传图片
微信的JS-SDK提供了微信客户端相关的功能,如:拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫等微信特有的能力,为微信用户提供更优质的网页体验.这里将会介绍如何通过调用JS ...
- 【转】UWP 捕获全局异常
转自:http://www.cnblogs.com/youngytj/p/4749004.html 异步(async)方法中的异常无法被App的UnhandledException捕获的问题 这是一个 ...
- Docker集群实验环境布署--swarm【6 配置上层Nginx代理,让任意Docker client访问得到高可用的管理API】
10.40.42.10上,也就是对应的VRRP中的10.40.42.1和2上,配置nginx tcp代理 # cat 4000_manager.venic.com_10.40.100.141-14 ...
- 【UOJ #280】【UTR #2】题目难度提升
http://uoj.ac/problem/280 非常难想的贪心,用set\(O(nlogn)\). 调了一天qwq. 题解 #include<set> #include<cstd ...
- Centos 7 拨号上网(PPPOE)
rp-pppoe 注意事项 网卡名称要填对,用 ifconfig 查看 有人说要卸载 NetworkManager,其实没必要,不冲突 pppoe-stop && pppoe-star ...
- IntelliJ IDEA中类似Eclipse自动补全变量名称和属性名称的快捷键
IntelliJ IDEA 默认快捷键模式下 自动补全变量名称 : Ctrl + Alt + v 自动补全属性名称 : Ctrl + Alt + f
- response.addCookie(cookie)添加cookie失败.
两个if循环能进来,创建的两个cookie也能通过控制台输出. 但是却添加失败. 原因是:request.getRequestDispatcher("/MainFrame").f ...
- Win32窗口
#include <Windows.h> #include <CommCtrl.h> #pragma comment(lib, "comctl32.lib" ...