黑马程序员---java基础加强---高新技术JDK1.5新特性

时间:2022-11-09 19:42:03

----------- android培训java培训、java学习型技术博客、期待与您交流! -----------

一 Eclipse的的配置

workerspace与project,必须要求会切换空间与导入项目

perspective与view

设置整个workspace的javac与java,高版本的java能运行低版本的javac编译的程序

快捷键的绑定与代码模板,利用快捷键提高效率。

二 静态导入

import语句可以导入一个类或者某个包中所有的类

import static 语句导入一个类中的某个静态方法或者所有的静态方法

三 可变参数

问题:一个方法接受的参数个数不固定,例如:

System.out.println(add(2,3,4));

System.out.println.out.println(add(2,3,4,5,67));

可变参数的特点:只能出现在参数列表的最后;...位于变量类型和变量名之间,前后有空格都行;调用可变参数的方法时,编译为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

黑马程序员---java基础加强---高新技术JDK1.5新特性

四 overload(重载)与override(重写)的区别

1、重载:

(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。

重载Overloading是一个类中多态性的一种表现。

(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标     准。

2、重写:

(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。

    但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

    方法重写又称方法覆盖。

(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

   父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

(3)子类函数的访问修饰权限不能少于父类的;

学习总结

    多态性是面向对象编程的一种特性,和方法无关,
     简单说,就是同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的
   重载——有不同的参数列表(静态多态性)

   而当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法,

    即在子类中重写该方法——相同参数,不同实现(动态多态性)

五 增强for循环

语法 for(type 变量名 :集合变量名){...} 注意事项:迭代量必须在()中定义,集合变量可以是数组或实现了iterable接口集合类

与传统for循环的比较(重点):

高级for循环在使用时,必须要明确被遍历的目标。这个目标,可以是Collection集合或者数组,如果遍历Collection集合,在遍历过程中还需要对元素进行操作,比如删除,

需要使用迭代器。 

如果遍历数组,还需要对数组元素进行操作,建议用传统for循环因为可以定义角标通过角标操作元素。如果只为遍历获取,可以简化成高级for循环,它的出现为了简化书写。 

高级for循环可以遍历map集合吗?不可以。但是可以将map转成set后再使用foreach语句。

1、作用:对存储对象的容器进行迭代: 数组  collection   map 

2)、增强for循环迭代数组: 

String [] arr = {"a", "b", "c"};//数组的静态定义方式,只试用于数组首次定义的时候 

for(String s : arr) { 

System.out.println(s); 

3)、单列集合 Collection 

List list = new ArrayList(); 

list.add("aaa"); 

// 增强for循环没有使用泛型的集合能不能使用增强for循环迭代?能

for(Object obj : list) { 

String s = (String) obj; 

System.out.println(s); 

4)、双列集合 Map 

Map map = new HashMap();

 map.put("a", "aaa"); 

// 传统方式:必须掌握这种方式 

Set entrys = map.entrySet(); // 1.获得所有的键值对Entry对象 

iter = entrys.iterator(); // 2.迭代出所有的

entry while(iter.hasNext()) { 

Map.Entry entry = (Entry) iter.next(); 

String key = (String) entry.getKey(); // 分别获得keyvalue

 String value = (String) entry.getValue(); 

System.out.println(key + "=" + value); 

// 增强for循环迭代:原则上map集合是无法使用增强for循环来迭代的,因为增强for循环只能针对实现了Iterable接口的集合进行迭代;Iterablejdk5中新定义的接口,就一个方法iterator方法,只有实现了Iterable接口的类,才能保证一定有iterator方法,java有这样的限定是因为增强for循环内部还是用迭代器实现的,而实际上,我们可以通过某种方式来使用增强for循环。

 for(Object obj : map.entrySet()) { 

Map.Entry entry = (Entry) obj;  // obj 依次表示Entry 

System.out.println(entry.getKey() + "=" + entry.getValue()); 


六枚举enum

问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个;

 解决办法: 

1.在setGrade方法中做判断,不符合格式要求就抛出异常;

2. 直接限定用户的选择,通过自定义类模拟枚举的方式来限定用户的输入,写一个Grade类,私有构造函数,对外提供5个静态的常量表示类的实例;

3,jdk5中新定义了枚举类型,专门用于解决此类问题; 

4,枚举就是一个特殊的java类,可以定义属性、方法、构造函数、实现接口、继承类;

枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后面有分号与其它成员分隔,把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

带构造方法的枚举:

1。构造方法必须定义为私有

2、如果有多种构造方法,该如何选择哪个构造方法?

3.枚举元素mon和mon()的效果一样,都是调用默认的构造方法


带方法的枚举:

1.定义枚举

2.、实现普通的next方法

2、实现抽象的next方法,每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义

4、增加上表示时间的构造方法。

枚举只有一个成员时,就可以作为一种单例的实现方式。

黑马程序员---java基础加强---高新技术JDK1.5新特性

黑马程序员---java基础加强---高新技术JDK1.5新特性



----------- android培训java培训、java学习型技术博客、期待与您交流! -----------