- 浏览: 84346 次
文章分类
- 全部博客 (136)
- 我的技术资料收集 (98)
- 具体技术 (1)
- 的技术资料收集 (4)
- All Articles (1)
- 机器学习 Machine Learning (1)
- 网络编程 (1)
- java (2)
- ava (1)
- 零散技术 (1)
- C# (3)
- 技术资料收集 (1)
- CQRS (1)
- 数据库技术(MS SQL) (1)
- .Net微观世界 (1)
- Oracle SQL学习之路 (1)
- C/C++ (1)
- JS/JQ (1)
- Js封装的插件/实例/方法 (2)
- 敏捷个人 (2)
- Javascript (1)
- 程序设计---设计模式 (1)
- Bug (1)
- 未知分类 (1)
- 程序设计 (1)
- Sharepoint (1)
- Computer Graphic (1)
- IT产品 (1)
- [06]JS/jQuery (1)
- [07]Web开发 (1)
- .NET Solution (1)
- Android (3)
- 机器学习 (1)
- 系统框架设计 (1)
- Others (1)
- 算法 (1)
- 基于Oracle Logminer数据同步 (1)
- 网页设计 (1)
- 原创翻译 (1)
- EXTJS (1)
- Jqgrid (1)
- 云计算 (1)
最新评论
1.多态
1)Java引用变量的两种类型:一个是编译时类型,一个是运行时类型。
编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
当编译时类型和运行时类型不一致的时候,就可能产生多态
package cn.it.lsl;
class BaseClass{
public int book=6;
public void base(){
System.out.println("父类方法");
}
public void test(){
System.out.println("被子类覆盖的方法");
}
}
public class SubClass extends BaseClass{
public String book = "JavaSe";
public void test(){
System.out.println("子类test()方法");
}
public void sub(){
System.out.println("子类方法");
}
public static void main(String[] args) {
BaseClass bc = new BaseClass();
System.out.println(bc.book);
bc.base();
bc.test();
System.out.println("-----------");
SubClass sc = new SubClass();
System.out.println(sc.book);
sc.sub();
sc.test();
System.out.println("-----------");
BaseClass ploy = new SubClass();
System.out.println(ploy.book); // 对象的Field不具备多态
ploy.base();
ploy.test();
//ploy.sub(); //编译出错
}
}
分析:
BaseClass ploy = new SubClass();编译时类型是BaseClass,运行时类型是SubClass,当调用引用变量的test方法是,实际上执行的是SubClass类中覆盖后的test方法,这就出现多态。
当运行时调用该引用变量的方法时,其方法总是变现出子类方法的行为特征,而不是父类的行为特征。
所以,相同类型变量,调用同一个方法是出现不用的特性,这就是多态。
ploy.sub();会产生错误,因为代码在编译时出错的。因为他的编译时是类型是BaseClass,编译时无法调用sub()。 (引用变量在编译阶段只能调用其编译时类型所具有的方法)
System.out.println(ploy.book);输出6,因为对象的Field不具备多态。
2)把一个子类对象直接赋值给父类引用变量,无须任何类型转换,这种称为向上转型。
把一个父类对象赋值给子类引用变量时,就需要进行强制类型转换,这时候应该使用instanceof运算符保证强制类型转换更安全。
3)instanceof
instandeof运算符的前一个操作数是一个引用类型的变量,后一个操作数是一个类(接口),它用于判断前面的对象是否是后面的类,或子类、实现类的实例。
instanceof运算符前面操作数的编译时类型要么与后面类相同,要么与后面的类具有父子继承关系。否则会引起编译错误。
package cn.it.lsl;
public class IntanceofDemo {
public static void main(String[] args) {
Object hello = "hello";
System.out.println(hello instanceof Object);
System.out.println(hello instanceof Math);
String a = "hello";
//System.out.println(a instanceof Math);
}
}
在强制类型转换之前,首先判断前一个对象是否是后一个类的实例,是否可以转换成功,从而报障代码的健壮性。
2.继承与组合
1)尽量不要在父类构造器中调用将要被子类重写的方法。
以下代码将发生空指针异常,Exception in thread "main" java.lang.NullPointerException
package cn.it.lsl;
class Base{
public Base(){
test();
}
public void test(){
System.out.println("要被子类重写的方法");
}
}
public class Sub extends Base{
private String name;
public void test(){
System.out.println(name.length());
}
public static void main(String[] args){
Sub s = new Sub();
}
}
new Sub()的时候会先执行父类的构造器,如果父类的构造器调用了被其子类重写的方法,则变成调用被子类重写后的方法。
即调用
public void test(){
System.out.println(name.length());
}
此时name是null,所以会抛出异常。
2)在代码复用的时候,运用继承会带来破封装性。组合也能实现代码的复用性,采用组合能够提供更好的封装。
3)组合是把旧类对象作为新类Field嵌入,用以实现新类的功能。一般在新类里使用private修饰被嵌入的旧类对象。
package cn.it.lsl;
class Animal{
private void beat(){
System.out.println("心脏跳动");
}
public void breath(){
beat();
System.out.println("呼吸");
}
}
class Bird{
private Animal a;
public Bird(Animal a){
this.a = a;
}
public void breath(){
a.breath();
}
public void fly(){
System.out.println("飞翔");
}
}
public class CompositeTest {
public static void main(String[] args) {
Animal a = new Animal();
Bird b = new Bird(a);
b.breath();
b.fly();
}
}
3.初始化块
1)初始化块可以对Java对象进行初始化操作。
2)若初始化块带有修饰符,则修饰符只能是static,其修饰的初始化块被称为静态初始化块。
3)当创建Java对象的时候,系统先调用该类里面的初始化块。而且在构造器之前执行。
4)当创建一个Java对象时,系统会先执行java.lang.Object类的初始化块,开始执行java.lang.Object的构造器,在执行器父类的初始化块,在开始执行其父类的构造器...然后才是执行该类的初始化块和构造器。
5)系统在类初始化阶段就执行了静态初始化块,而不是创建对象时才执行。所以静态初始化块总是比普通初始化块先执行。
package cn.it.lsl;
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();
System.out.println("mid有参构造:"+msg);
}
}
class Leaf extends Mid{
static{
System.out.println("leaf静态初始化块");
}
{
System.out.println("leaf普通初始化块");
}
public Leaf(){
super("JavaSe");
System.out.println("leaf构造器");
}
}
public class Test {
public static void main(String[] args) {
new Leaf();
new Leaf();
}
}
执行结果:
root静态初始化块
mid静态初始化块
leaf静态初始化块
root普通初始化块
root无参构造
mid普通初始化块
mid无参构造
mid有参构造:JavaSe
leaf普通初始化块
leaf构造器
root普通初始化块
root无参构造
mid普通初始化块
mid无参构造
mid有参构造:JavaSe
leaf普通初始化块
leaf构造器
发表评论
-
C#WebBrowser控件使用教程与技巧收集--苏飞收集 - sufeinet
2013-06-28 12:07 1073原帖地址:http://www.cnblogs.com/suf ... -
我要喷一个自认为很垃圾的网站架构 - 老赵【苏州】
2013-06-28 12:01 1134原帖地址:http://www.cnblogs.com/lao ... -
[翻译] Oracle Database 12c 新特性Multitenant - Cheney Shue
2013-06-28 11:43 624原帖地址:http://www.cnblogs.com/ese ... -
memcahd 命令操作详解 - 阿正-WEB
2013-06-28 11:37 475原帖地址:http://www.cnblogs.com/azh ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 597原帖地址:http://www.cnblogs.com/ste ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 560原帖地址:http://www.cnblogs.com/ste ... -
RPG游戏之组队测试 - zthua
2013-06-27 10:22 560原帖地址:http://www.cnblogs.com/zth ... -
IT人们给个建议 - SOUTHER
2013-06-26 14:06 526原帖地址:http://www.cnblogs.com/sou ... -
Java向前引用容易出错的地方 - 银河使者
2013-06-26 14:00 497原帖地址:http://www.cnblogs.com/nok ... -
使用Func<T1, T2, TResult> 委托返回匿名对象 - 灰身
2013-06-26 13:54 801原帖地址:http://www.cnblo ... -
【web前端面试题整理03】来看一点CSS相关的吧 - 叶小钗
2013-06-25 10:45 788原帖地址:http://www.cnblogs.com/yex ... -
Windows 8 动手实验系列教程 实验6:设置和首选项 - zigzagPath
2013-06-25 10:27 624原帖地址:http://www.cnblogs.com/zig ... -
闲聊可穿戴设备 - shawn.xie
2013-06-25 10:21 568原帖地址:http://www.cnblo ... -
CentOS下Mysql安装教程 - 小学徒V
2013-06-23 15:24 612原帖地址:http://www.cnblogs.com/xia ... -
vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) - skyme
2013-06-23 15:18 840原帖地址:http://www.cnblogs.com/sky ... -
之前专门为IE6、7开发的网站如何迁移到IE10及可能遇到的问题和相应解决方案汇总 - 海之澜
2013-06-23 15:12 956原帖地址:http://www.cnblogs.com/wuz ... -
Android学习笔记--解析XML之SAX - 承香墨影
2013-06-23 15:01 413原帖地址:http://www.cnblo ... -
SQL Server 性能优化之——T-SQL TVF和标量函数
2013-06-19 09:32 676原帖地址:http://www.cnblogs.com/Boy ... -
Nginx学习笔记(二) Nginx--connection&request
2013-06-19 09:26 671原帖地址:http://www.cnblogs.com/cod ... -
从郭美美霸气侧漏看项目管理之项目经理防身术
2013-06-19 09:20 504原帖地址:http://www.cnblogs.com/had ...
相关推荐
总结一下,本篇笔记涵盖了Java编程中的重要概念,包括构造器链、多态性、单态模式、静态初始化和对象引用比较,以及参数传递机制。理解并熟练运用这些知识点,能帮助开发者写出更加高效、可靠的Java代码。
- 变量初始化:必须在使用前进行初始化。 - 变量的作用域:局部变量、成员变量、静态变量。 - 局部变量:定义在方法或语句块内的变量,生命周期与该方法或语句块相同。 - 成员变量:定义在类内部、方法外部的...
构造器用于初始化新创建的对象,代码块可以是实例初始化块或静态初始化块,内部类可以是成员内部类、局部内部类、匿名内部类等。 【封装、继承和多态】 封装是将数据和操作数据的方法绑定在一起,保护数据不被随意...
构造方法是一种特殊的方法,用于初始化对象。 ##### 6.8 封装 封装是指隐藏对象的内部细节,并仅通过公共接口访问这些对象的能力。 ##### 6.9 方法的重载 方法重载是指在同一类中定义多个同名方法,但参数列表...
初学者会学习如何声明和初始化变量,理解不同类型的数据(如整型、浮点型、字符型和布尔型)以及它们在内存中的表示。此外,运算符的使用和流程控制结构的掌握将帮助编写出逻辑清晰的代码。 其次,笔记中应该会深入...
3. **数组**:学习一维和多维数组的声明、初始化和操作。 4. **异常处理**:理解如何捕获和处理程序运行时可能出现的错误,使用try-catch-finally语句块。 进阶的Java知识点包括: 5. **集合框架**:深入研究...
学习如何定义类、创建对象以及使用构造函数初始化对象。 5. **封装**:通过访问修饰符实现数据的隐藏和保护,以及使用getter和setter方法来操作对象属性,这是面向对象编程的关键原则。 6. **继承**:Java支持单一...
这份"java笔记"是专为初学者设计的,旨在帮助那些对编程没有基础的人快速掌握Java核心技术。笔记采用Ediplus编辑器编写,这是一款轻量级且功能强大的文本编辑工具,非常适合程序员进行代码编写和学习。 首先,Java...
- 构造器用于初始化新创建的对象,不能被重写(override),但可以重载(overload)。 - 私有的构造器可以防止其他类实例化,通常在单例模式中使用。 6. **重载和重写**: - 重载发生在同一类中,方法名相同,但...
- `final`变量一旦初始化就不能改变(对于基本类型来说)。 #### 接口的多继承 - **定义**:接口是一种特殊的抽象类,用于定义一组方法签名。Java中,一个类可以实现多个接口,从而实现多继承的效果。 - **特点**...
- 结果分析:父类静态初始化块 → 子类静态初始化块 → 父类实例初始化块 → 父类构造方法 → 子类实例初始化块 → 子类构造方法。 - 总结:子类加载顺序遵循一定的规则,父类静态初始化块优先于子类静态初始化块...
2. Java Array:介绍数组的声明、初始化、使用和数组的长度属性。 3. 数组的复制与动态扩展算法:讲解如何复制数组以及动态扩展数组的算法。 4. String字符串:深入探讨String类的特性以及字符串的不可变性。 **...
《毕向东java笔记》是一份详尽的Java学习资源,适合初学者使用。笔记涵盖了Java编程的基础到进阶内容,包括源代码示例,有助于理解与实践。以下是笔记中涉及的主要知识点: 1. **Java特性与优势**: - **简单性**...
- 变量的初始化总是在构造函数之前完成。 6. **集合Collection**: - Collection是Java集合框架的顶级接口,代表了一组独立的对象。 7. **迭代器Iterator**: - 迭代器是访问集合元素的标准方式,提供了`...
这份"JAVA培训笔记PPT初级的"旨在帮助初学者掌握Java的基础知识,为后续的深入学习打下坚实基础。以下将对Java的核心概念、语法特点及主要知识点进行详细解析。 1. **Java概述**: Java是由Sun Microsystems(现已...
4. **构造方法**:构造方法用于初始化对象,没有返回值,其名称与类名相同。构造方法在创建对象时自动调用,用于设置初始状态。 #### 结论 Java的面向对象编程提供了强大的工具和概念,帮助开发者构建复杂而灵活的...
- **数组**:一维、二维数组的声明、初始化和操作,以及ArrayList和LinkedList等动态数组的使用。 7. **集合框架**:List、Set和Map接口及其常用实现类,如ArrayList、LinkedList、HashSet、HashMap等,理解它们的...
Java中的实例变量定义在类中但不在任何方法内部,它们是在对象实例化时被初始化的。局部变量则是在方法内部定义的变量,它们必须在使用前明确赋值。实例变量和局部变量都允许有命名冲突,但是它们的作用域不同。实例...
Java编程语言是由Sun Microsystems(现...总结,这份Java笔记全面介绍了Java语言的核心概念和实践技巧,是初学者和进阶者学习Java的宝贵资料。通过深入理解和实践这些知识点,开发者可以构建高效、稳定的Java应用程序。
这份"java笔记精华1"的压缩包包含两份核心资料,分别涵盖了面向对象技术和Java高级特性的总结,对于学习和理解Java编程至关重要。 首先,我们来看"(二)面向对象技术总结.pdf"。面向对象编程(Object-Oriented ...