重载(overload):
编译器根据同名方法的参数不同,而自动调用相应的方法。返回值不同不能作为方法重载的依据。
编译器在处理重载方法、装箱问题和不定长参数时,会依据下面的顺序来寻找符合的方法(java 学习笔记 jdk5.0 林信良P147 ):
寻找在还没有装箱动作前可以符合参数个数与类型的方法;
尝试装箱动作后可以符合参数个数与类型的方法;
尝试设有不定长度参数并可以符合的方法;
编译器找不到合适的方法,报告编译错误;
继承:
基于某个父类对象进行扩展,而定制出一个新的子类。子类可以继承父类的某些定义,也可以新增加原来父类没有的定义,或者重写父类中的某些特性。在 java 中,所有的类直接或者间接的继承了 java.lang.Object 类。
参考:
构造函数中的继承;
Object 方法介绍;
重写(override):子类重新实现父类的方法。
重写方法时,可以增大父类方法的权限,但不可以缩小父类方法的权限。
抽象类
仅声明方法名称,而不定义方法的实现,这样的的方法成为抽象方法,包含抽象方法的类即成为抽象类。
抽象类和抽象方法必须用 abstract 修饰;
抽象类必须被继承,不能被 new ,抽象方法必须被全部实现;
继承抽象类的子类,可以添加父类中没有的方法;
接口
接口是一种特殊的数据类型,只包含了抽象方法和常量定义;
使用 interface 关键字,非 class;
不能被 new ,只能被 implements ,必须实现所有的抽象方法;
通过 implements 来实现多继承;
实现接口的类,可以添加接口中没有的方法;
多态:
1. 多态实现指的是使用同一个实现接口,以实现不同的对象的实例。多态实现在面向对象上是为了降低对实现接口的依赖程度,进而增加程序框架的弹性与可维护性。
2. 实际上在设计时并不依赖于具体类,而是依赖于抽象,Java 中在实现多态时,可以让程序依赖于抽象类或者接口。
3. 通过抽象类或者接口来调用其实现类(实现抽象类或者接口的类),进而降低对其实现类的依赖,这样改写代码时,只要改写其实现类即可。
4. 抽象类多态特点:继承某抽象类的类必须是该抽象类的一个子类,由于属于同一个类型,如果父类中有定义同名方法,就可以通过父类类型来引用子类实例中被重写的方法,也就是通过父类类型进行多态实现。
5. 接口多态特点:接口的目的在于定义一组可实现的方法,实现某接口的类必须实现该接口定义的所有方法。只要对象实现了某个接口,就可以通过该接口来引用该对象,无论对象属于那个类。
Set s = new hashSet(); // 接口,实现类
内部类
public,default,protected,private 对类成员的访问权限
定义为 private 类成员,只能被类本身访问;
定义为 default 类中不加任何限制条件属于默认的访问状态,可以被类本身和同一个包中的类访问;
定义为 protected 类成员,可以被类本身、它的子类(包括同一个包中和不同包中的子类)以及同一个包中的所有其他类访问;
定义为 public 类成员,可以被所有的类访问;
java.lang.Object
getClass(),notify(),notifyAll(),wait() 被final修饰,无法改写
getClass():返回对象于执行时期的Class实例;
clone():生成一个被调用对象的副本,并为这个新对象分配内存地址
toString(),equals(),hashCode() 可以重新改写
toString():默认返回类名称和16进制的编码,即 getClass().getName()+'@'+Integer.toHexString(hashCode())
equals():默认比较对象的内存地址是否相同,可以重新改写,以定义自己的对象在什么条件下可视为相等的对象。在重写equals()方法时,建议同时重写hashCode()方法,因为在某些场合需要比较两个对象是否为相等的对象时,会调用 equals()与 hashCode()方法来判断。例如加入 java.util.Set容器中的对象就必须重写 equals()与 hashCode()方法,以作为加入 Set 的唯一对象的识别。
hashCode():返回该对象的哈希码
重写 equals()与 hashCode()方法实例
林信良,孙卫琴
附录:
参考:
比较运算符 == , 类方法 equals(Object o),运算符 instanceof,赋值运算符 =
新特性
1. autoboxing,unboxing
2. foreach 循环
3. 不定长参数
4. import 静态成员
5. 枚举类型
String
1. 将字符串强制转换为数值类型
用数值类型类的静态方法
Integer.parseInt("str");
...
2.
String str="hello";
String str=new String("hello");
3. 对于叠加字符串频繁的操作,不要用 str1+str1 这种操作方式来叠加,每次 + 操作会产生一个新的字符串(原因见 string 池)
3.1 单线程,不处理同步问题
java.lang.StringBuider 类
3.2 多线程,需要同步
java.lang.StringBuffer
3.3注意用 append() 方法.
//
JDK1.5新特性介绍
JDK1.5”(开发代号猛虎)的一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-each 循环,自动装包/拆包,枚举,可变参数, 静态导入 。使用这些特性有助于我们编写更加清晰,精悍,安全的代码。
下面我们简单介绍一下这些新特性。
1.泛型(Generic)
C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。
Collection c = new ArrayList();
c.add(new Date());
编译器会给出一个错误:
add(java.lang.String) in java.util.Collection cannot be applied to (java.util.Date)
2.For-Each循环
For-Each循环得加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为:
void processAll(Collection c){
for(Iterator i=c.iterator(); i.hasNext();){
MyClass myObject = (MyClass)i.next();
myObject.process();
}
}
使用For-Each循环,我们可以把代码改写成:
void processAll(Collection c){
for (MyClass myObject :c)
myObject.process();
}
这段代码要比上面清晰许多,并且避免了强制类型转换。
3.自动装包/拆包(Autoboxing/unboxing)
自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
自动装包:基本类型自动转为包装类.(int >> Integer)
自动拆包:包装类自动转为基本类型.(Integer >> int)
在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制解决了我们的问题。
int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换成Integer.
Integer b = new Integer(2);
c.add(b + 2);
这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer.
4.枚举(Enums)
JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。
public enum Color
{
Red,
White,
Blue
}
然后可以这样来使用Color myColor = Color.Red.
枚举类型还提供了两个有用的静态方法values()和valueOf(). 我们可以很方便地使用它们,例如
for (Color c : Color.values())
System.out.println(c);
5.可变参数(Varargs)
可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象,
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
…
在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) {
for (Object obj: objs)
System.out.println(obj);
}
在引入可变参数以后,Java的反射包也更加方便使用了。对于c.getMethod("test", new Object[0]).invoke(c.newInstance(), new Object[0])),现在我们可以这样写了c.getMethod("test").invoke(c.newInstance()),这样的代码比原来清楚了很多。
6.静态导入(Static Imports)
要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。
import static java.lang.Math.*;
…….
r = sin(PI * 2); //无需再写r = Math.sin(Math.PI);
不过,过度使用这个特性也会一定程度上降低代码地可读性。
分享到:
相关推荐
专业的Java笔记可能会涉及这些内容,帮助学习者掌握Java的最新发展。 遗憾的是,由于【部分内容】部分不包含实际的笔记内容,无法进一步提供具体的编程示例和深入的解释。如果要学习Java,最好的方式是从学习Java的...
java笔记java笔记java笔记java笔记java笔记java笔记java笔记
【宋红康java笔记】是一份综合性的Java学习资料,由知名编程教育者宋红康编撰。这份压缩包文件包含了大量的Java编程知识点,旨在帮助初学者和有经验的开发者深入理解和掌握Java语言的核心概念与高级特性。以下是根据...
这份"非常好的java笔记"无疑是初学者踏入这个领域的宝贵资源。笔记由培训班的专业老师编写,内容详细且全面,旨在帮助初学者系统地学习和理解Java的基础知识。 首先,Java基础部分会涵盖变量、数据类型、运算符、...
《狂神说Java笔记资料》是一份全面涵盖Java开发基础知识的文档集,旨在帮助学习者系统地掌握Java编程。这份笔记包含多个章节,每个章节都深入讲解了一个特定的主题,覆盖了从初学者到进阶开发者必备的知识点。 1. *...
马士兵JAVA笔记(全) 本资源是马士兵的JAVA笔记,涵盖了JAVA语言的基础知识,包括标识符、常量、变量、数据类型、运算符、控制流语句等。 标识符是JAVA中的一种符号,用于命名变量、方法、类等。标识符由字母、...
【标题】"韩顺平java笔记完整版.zip(无笔记,只是代码)"指的是一个包含韩顺平老师Java教学视频中所有代码的压缩文件。这个压缩包不包含笔记,而是专注于提供实际的编程示例,使得学习者可以直接查看和学习Java编程...
这份"18天Java笔记"提供了一个快速学习Java的核心内容精华,适合初学者和有一定经验的开发者进行回顾和巩固。txt版的格式使得笔记易于阅读和在不同设备上分享。 Java的基础知识包括语法、数据类型、控制流、类与...
"java笔记全套下载" 提供的可能是一系列详细的学习资料,涵盖了从基础到高级的Java知识体系,帮助学习者系统地掌握这门语言。 Java的基础知识包括: 1. **Java语法**:了解变量、数据类型、运算符、流程控制(如if-...
全套java笔记整理,侧边栏目录结构方便查看,纯手工整理。达内笔记整理。 已整理成带侧边栏目录的网页结构,方便复习大纲和跳转查看。大部分都带有笔记代码。 (默认设置为深珊瑚蓝色调,不喜欢可以把配置文件里的...
"韩顺平java笔记完整版"是一个针对初学者的Java学习资源包,由知名IT教育专家韩顺平教授精心制作。这个压缩包中包含了丰富的Java学习资料,如PPT课件和基础教程,旨在帮助初学者系统地掌握Java编程。 首先,我们来...
【Java笔记桌面程序】 在IT领域,开发个人定制的桌面应用程序是解决特定需求的有效方法。本项目名为"Java笔记桌面程序",它是由一个热衷于编程的开发者为解决其所在公司无法使用网络笔记客户端的问题而自创的。这个...
2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 枚举类 2020-4-10 java 注解(Annotation) 2020-4-11 ...
韩顺平java笔记整理,整理了韩顺平java上课的视频的代码笔记,以及归纳总结
### Java基础知识概述 #### 1. 前言 Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。Java的设计理念是“一次编写,到处运行”,这意味着编写的Java程序可以在任何安装了...
达内是一家知名的教育机构,其整理的Java笔记通常会覆盖从基础到进阶的各种主题,以系统化的方式帮助学员掌握这门广泛使用的编程语言。 首先,Java的基础知识是必不可少的,这些笔记可能包括变量、数据类型、运算符...
标题中的“全套java笔记数据库部分”表明这是一份关于Java编程语言中数据库操作的全面学习资料,涵盖了从基础到进阶的各种主题。描述提到“最新的全套javaEE开发笔记”,暗示了这些笔记可能针对的是Java企业版(Java...
《李兴华Java笔记》是一份综合性的学习资料,涵盖了Java编程语言的基础到高级主题,适合初学者和有一定经验的开发者。这份笔记可能是作者李兴华个人教学或学习经验的结晶,但需注意,它可能并非针对Java 8版本特别...
本压缩包文件“达内java笔记,精挑细选(达内助教整理)0积分”提供了一份详尽的J2EE学习资料,旨在帮助学习者高效掌握核心知识点。 首先,Java笔记涵盖了基础到高级的Java知识点。Java基础部分包括语法、数据类型...