- 浏览: 72558 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
须等待:
强烈同意。。。。这个编辑器简直太不好用了!
对于在Ubuntu下的Eclipse上安装SVN客户端插件Subclipse的补充 -
nudtgk2000:
flysnail 写道 思路挺好,
谢谢鼓励,还是初学者,不 ...
重写CountDownLatch以实现线程状态监视 -
flysnail:
思路挺好,:)
重写CountDownLatch以实现线程状态监视
J2SDK中主要的包介绍
位置%JAVAHOME%\jre\lib\rt.jar, rt: runtime, 这个jar文件意为虚拟机运行时必用到的那些包.
CMD下将类文件达成jar包的方法: 在最上层包所在目录下输入命令jar -cvf xx.jar *.*
使用打好的jar包: 把jar文件的全路径名添进%CLASSPATH% 即可。
java.lang
包含一些Java语言的核心类(如String, System, Math, Integer和Thread等), 提供常用功能. 唯有java.lang包无需import, 直接使用.
java.awt
包含了构成抽象窗口工具集(abstract window toolkits)的多个类, 用于构建和管理应用程序的图形用户界面(GUI).
java.applet
已经不常用. 包含applet运行所需的一些类.
java.net
包含执行与网络相关的操作的类.
java.io
包含能提供多种输入输出功能的类.
java.util
包含一些实用工具类, 如定义系统特性, 使用与日期日历相关的函数等.
类的继承与权限控制
继承
extends关键字
java只支持单继承,不允许多继承(接口代之)
访问控制
private ——类内部(子类对这样成员只能看不能用)
default ——同一个包
protected ——子类
public ——
对class的权限修饰只可以用public和default(但四种都可用于修饰内部类)。
方法的重写overwrite
在子类中可以根据需要对从基类中继承来的方法进行重写;
重写方法必须和被重写方法具有相同方法名、参数列表和返回类型(注意与重载的区别);
Tips:为保证同名,建议用复制粘贴。
重写方法不能使用比被重写方法更严格的访问权限;
super
引用基类的成分(对比this)
子类中定义的与父类中的成员变量重名的成员变量是两个存储空间, 可用super引用来区分开
继承中的构造方法
- 子类的构造过程中必然调用其父类的构造方法
- 子类可以在自己的构造方法第一句显式地添加 super(argument_list) 语句调用父类的构造方法
tips: this(argument_list) 则是调用本类其他重载的构造方法
- 缺省情况下, 系统默认调用父类无参数的构造方法
- 如果子类构造方法中既没有显式地调用父类构造方法, 而父类中又没有无参数的构造方法, 则会编译出错
Object类
- 是所有Java类的唯一的根基类 (C++有很多);
- 缺省时, 都默认是Object类的子类;
- 位于%JAVAHOME%\jre\lib\rt.jar\com\sun\java\lang\Object.class
- Object类的方法也是所有类都继承的基本方法: clone(), equals(), finalize(), getClass(), hashCode(), notify(), notifyAll(), toString(), wait();
- toString()方法 在类对象与String的连接操作时如
System.out.println("Object is " + (new Object()));
时, 被自动调用;
Object类的toString方法返回值由此对象类名加"@"加此对象哈希码的无符号十六进制表示组成, 即:
getClass().getName() + "@" + Integer.toHexString(hashCode())
且Sun建议所有类都重写它
- equals()方法http://static.oschina.net/uploads/doc/javase-6-doc-api-zh_CN/index.html?overview-summary.html
重写equals()方法需要注意检查传参的引用值非空以及类型检查
比较这两种写法:
// 类型检查1 class C { int i; String j; public boolean equals(Object o) { if (null == o) return false; if (o instanceof C) { C c = (C) o; return this.i == c.i && this.j.equals(c.j); } return false; } }
// 类型检查2 ... public boolean equals(C o) { if (null == o) return false; return this.i == o.i && this.j.equals(o.j); } ...结论:第二段是错误的写法,原因见http://nudtgk2000.iteye.com/blog/1455669
父类与子类的equals比较...推理很简单, 实验证明也成立.
Tips: String类型在如下情况可用"=="判断相等:
String a = "hello"; // 因为"hello"在 data segment 中只有唯一的字符串常量, String b = "hello"; // 也就是说a和b的确引用的是同一个地址 System.out.println(a == b); String c = new String("hello"); // 但是,这样写就是new出来了两个对象, String d = new String("hello"); // 两个地址不会一样 System.out.println(c == d); // 输出: true // false
对象转型casting
- 一个基类的引用类型变量可以"指向"其子类的对象;
Animal a = new Bird(); // 这是可以的
- 一个基类的引用不可访问其子类对象新增加的成员(属性和方法);
// 续上语句 a.fly(); // 这是不行的, 因为现在把a视为一般动物了, 在内存上a实际上仅指向Bird类对象中Animal的那部分.
- 可以使用 "应用变量 instanceof 类名" 来判断该引用类型变量所"指向"的对象是否属于该类或该类的子类;
a instanceof Animal; // true a instanceof Bird; // true
- 父类引用子类对象称作向上转型(upcasting), 反之称为向下转型(downcasting)(或者称为强制转换).
- 可扩展性 -- 子类对象做为父类引用参数传入方法
public f(Animal o) {...}; ... f(bird); f(fish); f(snake); ...
动态绑定Dynamic Binding(多态Polymoph, Late Binding)
面向对象的核心机制
动态绑定是指在执行期间(而非编译期)判断所引用对象的实际类型, 根据其实际的类型调用相应的方法.
优点: 最好地支持了可扩展性
class Animal {
private String name; Animal(String name) {this.name = name} public void enjoy() { System.out.println("叫声"); } } class Cat extends Animal { private String eyeColor; Cat(String a, String c) { super(a); eyeColor = c; } public void enjoy() { // 重写 System.out.println("猫叫"); } } class Dog extends Animal { private String furColor; Cat(String a, String f) { super(a); furColor = f; } public void enjoy() { // 重写 System.out.println("狗叫"); } } class Lady { private String name; private Animal pet; // 定义成父类类型能带来最大的灵活性 Lady(String name, Animal pet) { this.name = name; this.pet = pet; } public void myPetEnjoy() { pet.enjoy(); } } public class Test { public static void main(String args[]) { Cat c = new Cat("catname", "blue"); Dog d = new Dog("dogname", "black"); Lady l1 = new Lady("l1", c); Lady l2 = new Lady("l2", d); l1.myPetEnjoy(); l2.myPetEnjoy(); } } /** 输出 * 猫叫 * 狗叫 */
上面的例子中,根据Lady对象的成员变量pet所引用的不同的实际类型而调用相应的enjoy方法
三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
发表评论
-
Weka 3.6.9 加载libsvm类包的正解
2014-05-24 10:59 5922Weka 3.6.9本身不带libsvm的类包,百度网上铺天 ... -
【转】常用的系统属性
2012-11-21 17:02 777获取类文件所在的绝对路径 写道 "Jav ... -
用Log4j实现线程独立日志
2012-11-04 22:53 8183需求: 在一个项目里,我使用Log4j生成日志, ... -
重写CountDownLatch以实现线程状态监视
2012-11-04 20:25 1505需求:管理线程需要及时知道工作线程全部处于等待状态,并满足等待 ... -
byte型检查
2012-09-09 21:14 800byte b; //... ... // 范围检查,确保只 ... -
【转】Dom4j的使用(全而好的文章)
2012-08-07 15:09 939java解析xml汇总, 结论就是Dom4j比其他几种好 ... -
【转】正则表达式的一些资料
2012-08-07 15:07 847JAVA 正则表达式 (超详细)http://blog.csd ... -
【转摘】Exception in thread "main" java.lang.OutOfMemoryError: Java heap space解决方法
2012-08-04 18:02 14916摘自http://hi.baidu.com/61919 ... -
【转】java解析xml汇总
2012-07-31 20:53 16java解析xml汇总 -
java.io.InputStream.mark(int readlimit) 方法的个人理解
2012-05-16 16:04 0在马士兵java课程的IO这一章[1]中遇到 java.io ... -
马士兵课程笔记(续7) —— 流
2012-03-20 18:51 0Java 流式输入/输出原理 ... -
马士兵课程笔记(续6)
2012-03-18 18:31 1241容器 概念 Java API 所提供的用于在程序中 ... -
走了一段值得的弯路
2012-03-16 21:27 1045class C { int i; S ... -
马士兵课程笔记(续5)
2012-03-09 19:28 1440常用类 字符串相关类(String, StringBuff ... -
马士兵课程笔记(续4)
2012-02-28 21:58 1123数组 数组可以看成是多个相同类型数据组合,对这些数据的统一 ... -
马士兵课程笔记(续3)
2012-02-22 16:47 1490抽象类 关键字abstract 含有抽象方法的类必须声明 ... -
马士兵课程笔记
2011-11-14 07:47 1259J2EE框架 EJB (Enterprise Ja ... -
Porter Stemmer 波特词干算法
2011-10-26 08:17 6762/* Porter ... -
Linux命令收集罐
2011-10-23 16:54 916查看系统进程——ps 要对 ... -
JAVA中 @Override 的作用(转)
2011-10-22 22:44 2562<!-- @pa ...
相关推荐
【标题】"马士兵课程笔记(续5)"主要聚焦在编程和软件开发的某一特定领域,结合了“源码”和“工具”的概念。这可能是关于解析、分析或利用源代码,以及使用特定工具来提升开发效率或理解复杂系统的主题。马士兵是一...
【标题】"马士兵课程笔记(续4)"主要聚焦于编程知识,特别是通过代码实例来深化理解。马士兵是一位知名的IT教育专家,他的课程通常涵盖了广泛的编程主题,旨在帮助学员深入掌握技术。在这个部分,他可能继续讲解了...
### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...
马士兵JAVA笔记(全) 本资源是马士兵的JAVA笔记,涵盖了JAVA语言的基础知识,包括标识符、常量、变量、数据类型、运算符、控制流语句等。 标识符是JAVA中的一种符号,用于命名变量、方法、类等。标识符由字母、...
马士兵oracle笔记,浅显易懂。
jvm java虚拟机 调优 马士兵 笔记 让你对java虚拟机调优有初步的认识
Spring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).doc
马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...
马士兵老师的MyBatis学习笔记主要涵盖了以下几个核心知识点: 1. **MyBatis安装与环境搭建**:首先,你需要配置Java开发环境,并了解Maven或Gradle构建工具,因为MyBatis通常与这些工具结合使用来管理依赖。然后,...
马士兵Spring课堂笔记(超级详细版) 本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring...
马士兵Spring课堂笔记(详细版) 马士兵spring视频笔记
以下是关于"马士兵Struts2笔记2013"中的关键知识点详解: 1. **建立Struts2工程** 创建一个Struts2工程通常涉及在集成开发环境中(如MyEclipse)创建一个新的Web项目,然后将必要的Struts2库添加到项目的`lib`目录...
JAVA就业班笔记【马士兵说】.nyf
"JAVA笔记(根据马士兵的java视频整理)" 本资源是根据马士兵的JAVA视频整理的笔记,涵盖了JAVA的基础知识、数据结构、面向对象编程、Java Web编程、J2EE、J2ME等方面的知识点。 在基础知识方面,本资源涵盖了变量...
《马士兵Hibernate学习笔记》是一份详尽的教程,涵盖了Hibernate框架的核心概念和技术要点。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它有效地解决了Java应用程序与数据库之间的数据交互问题,...
以下是对马士兵多线程笔记的详细解析。 1. **多线程基础**:多线程是指一个应用程序中同时执行多个线程(即任务)的能力。这种并发执行可以提高系统资源的利用率,提升程序的响应速度和执行效率,特别是在多核...
### Java SE - 马士兵笔记精要 #### 第1章 Java概述 - **Java语言的特点**: - **面向对象**:Java是一种完全支持面向对象编程的语言。 - **平台无关性**:通过Java虚拟机(JVM),Java可以在任何安装了JVM的...