jdk1.5特性

1.自动装箱与拆箱.
java中的包装类.
包装类是对java中的基本数据进行包装,可以将基本类型包装成类类型。

基本数据类型

四类八种.
1.整型 byte short int long
2.浮点型 float double
3.字符 char
4.布尔 boolean

包装类
Byte Short Integer Long
Float Double
Character
Boolean

自动拆箱
直接将Integer对象赋值给int

自动装箱
直接将int赋值给Integer。

//对于Integer类它的自动装箱时,如果int值是在-128----127之间是从IntegerCache中取出的一个值,
如果不在这个范围内是重新new Integer()

-------------------------------------------------------------
增强for循环
它的底层实现就是使用Iterator。
什么样的容器可以使用增强for?-----------Iterable

增强for的缺点:只能进行遍历,不能进行在遍历过程中的操作.

增强for的格式
for(类型 引用:容器){
}
--------------------------------------------
关于对集合的遍历.
List
1.Iterator
2.增强for
3.普通for
4.ListIterator
Set
1.增强for
2.Iterator
Map
1.keySet---得到所有的key的Set视图
2.entrySet--得到key-value的set视图

-------------------------------------------------------------------------
可变参数:
格式 类型... 变量
本质上这个参数是一个数组。

优点:1.传参数时可以传递数组,也可以传递多个值。
2.可以不传递值.

Arrays.asList()可以将数组转换成List集合.
注意:得到的是一个固定长度的List集合。
原因:是因为数组长度是固定的,这个集合是由数组转换成的。

为什么要将数组转换成集合?
集合中提供更丰富的操作.

int[] arr = { 1, 2, 3 };
List list = Arrays.asList(arr);
System.out.println(list.size());

System.out.println(list);

将一个int[]转换成了List集合使用Arrays.asList方法
得到的集合长度为1,集合中的元素是int[]为什么?

集合中的元素是Object。
因为我们现要转换的集合中的元素是int类型,不能直接装入到集合中(也没有进行装箱)
这时就将数组对象做为了集合对象.List<int[]>

----------------------------------------------------------------------------------
静态导入(知道)
格式:import static 包名.类名.方法名(属性名);

在类中使用这个静态成员时可以不用类名。直接写方法名或属性名就可以。

静态导入缺点:
1.代码可读性下降.
2.由于方法名的重复,静态导入在一些特定的情况下会报错.

----------------------------------------------------------------------
泛型(重点)
什么是泛型?
对数据类型进行一个限定.
应用最多的地方是集合。
为什么要使用泛型?
1.提高我们程序安全性.
2.将运行阶段的问题在编译阶段解决.
3.不用进行类型强制转换
-----------------------------------------------
我们学习泛型的目的:会使用集合上定义的泛型。

1.集合上泛型的基本使用.
//Collection<E>
//List<E>
//Set<E>
//它们的作用是限定集合中元素的类型.

我们可不可以自己在类上或接口上定义泛型?
可以。怎样定义?

class 类名<T>{

}
在类上声明的泛型怎样使用?
类的成员:成员属性---成员方法.
成员属性:类属性(static) 实例属性(非static)---我们管实例属性就叫成员属性.
成员方法:类方法 实例方法(成员方法)

类上声明的泛型 可以应用于成员方法或成员属性上。

在类上声明的泛型不能在类的静态成员上使用?
原因:是类上声明的泛型,只有在创建对象进才能进行类型传递。
而静态成员是不需要对象就可以调用。

我们可不可以在静态的方法上声明泛型?

可以
格式
修饰符 <泛型> 返回值 方法名(){}

泛型是应用于设计阶段.

-----------------------------------------------------------------------------
在集合上应用泛型高级
通配符. ?

关于?在集合中的应用.
1. ? extends E
代表的是E类型或E的子类类型.

应用:在Collection接口中的addAll 方法
2. ? super E
代表的是E类型或E的父类类型.

应用:在TreeSet的构造方法上。

TreeSet集合:
它是一个可以排序的Set集合.

TreeSet集合怎样排序?
1.自然顺序
只要实现这个接口Comparable,就代表这个类型的元素具有自然顺序
2.比较器.
实现这个接口Comparator的类,可以根据指定条件进行比较。

指定比较器时,如果集合中的元素是按照父类中的属性进行比较,这时可以使用父类的比较顺.

------------------------------------------------------------------
泛型擦除机制

笔试题:List<String> list=new ArrayList<String>().要求向集合中添加一个Integer数值10

List<String> list = new ArrayList<String>();

// list.add(10);

List a = list;
a.add(10);

System.out.println(list);

上面操作,在笔试中不要使用,而要使用反射完成.

泛型在编译阶段有效,在运行阶段无效果。

-------------------------------------------------------------------------------------------------------------------
枚举

枚举是什么?
它就是一个特殊的java类.

类的定义
class 类名{}
接口的定义
interface 接口名{}
枚举的定义
enum 枚举名{}

示例
public enum Demo1{} 也会生成一个class文件.

我们对其进行反编译.
定义到我们的class文件所在目录下 执行 javap Demo1

得到的结果
public final class Demo1 extends java.lang.Enum<cn.itcast.enumdemo.Demo1> {
static {};
public static Demo1[] values();
public static Demo1 valueOf(java.lang.String);
}

枚举它是一个java类,它继承了java.lang.Enum这个类.

枚举有什么用?

我们在开发中,有些数据必须被限定在某个范围内取值,不可以超出这个范围,那么这时就可以使用枚举.
比我们传统的代码书写简单.

------------------------------------------------------------
枚举的语法
枚举类也是一种特殊形式的Java类。
枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
若枚举类只有一个枚举值,则可以当作单态设计模式使用。

注意:在枚举中可以声明方法,属性,构造方法.构造方法必须private。

如果枚举中只有枚举值,最后一个枚举值后面可以不写;结束符.
如果有了其它成员,必须在最后一个枚举值加上";".

1.构造方法必须private,可以重载.
2.在枚举中声明属性,声明方法.

---------------------------------------------------
1:枚举默认就是abstract的,不可以实例化。
2:枚举中可以拥有abstract抽像方法。
3:枚举的所有成员,都默认是public static final类型的。且必须要第一行开始声明。必须在,(逗号)分开。
4:所有的枚举,默认都是java.lang.Enum。
5:Enum类不但是所有枚举的公共的基类,还是一个工具类。

enum ------它是用于声明枚举类的.
Enum ------java中的一个类,它代表所有枚举的父类.
Enumeration----相当于Iterator 遍历集合

--------------------------------------
枚举类中可以声明abstract方法.
如果枚举类中存在抽象方法,对于每一个枚举值必须对这些抽象方法进行重写.

-------------------------------------------------------------------------------
枚举的方法.

1.枚举类中自带
values()-----得到枚举类中的所有枚举值
valueOf()------

2.枚举类从java.lang.Enum类继承的.

name方法---得到枚举值的字符串表现形式.
ordinal() ----得到枚举值的序号
valueOf(Class c,String name)将一个字符串转换成指定枚举类型的枚举值

----------------------------------------------------
枚举知识点掌握
1.枚举在什么时候使用,怎样定义枚举.
2.枚举中可以包含什么内容
3.枚举中常用的方法.

------------------------------------------------------------------------------------------------------------
反射:
什么是反射?
剖析Java类中的各个组成部分映射成一个个java对象
为什么用反射?
多用于框架和组件,写出复用性高的通用程序

1.Class类.
Class代表的就是我们的字节码文件.
三种方式.
1.类名.class
2.对象.getClass();
3.Class.forName();

在开发中创建使用第三种 Class.forName();为什么?
这种方式耦合度低,没有依赖性.

------------------------------------------
2.Constructor(构造器对象)
构造器的作用就是用来创建对象的。
Constructor代表的是构造器对象,我们得到它后就可以实例化对象.

1.怎样得到Constructor对象.
getConstructor()-----得到指定的构造器
getConstructors();---得到所有的构造器

2.关于Constructor的注意事项
1.如果构造方法不是public。那么要获取其构造器对象使用 getDeclaredConstuctor()方法.

2.对于私有化权限,在使用前必须设置权限检查.
public void setAccessible(boolean flag)
值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查

3.在开发中,我们在得到Class时,一般会直接实例化类的对象.

2.Field

3.Method

1.

2.对于static方法怎样调用?
静态方法调用时不需要使用对象,直接写null
staticMethod.invoke(null,参数);
方法的参数如果是数组怎样调用?

在调用invoke时,第二个参数强制转换成Object,或在外面在包装一层数组.

------------------------------------------------------------------------------

时间: 2024-10-27 00:44:39

jdk1.5特性的相关文章

黑马程序员_日记18_Java多线程(八)--生产者消费者问题JDK1.5特性

--- android培训.java培训.期待与您交流! ---- 生产者消费者问题JDK1.5特性 一.概述 在JDK1.5之前,解决生产者和消费者问题, 用的是synchronized同步+while+notify(): 但是这种方法很不安全,很容易让线程全部陷入无限等待状态. 于是我们改用notiyfyAll();来解决. 这样虽然解决了安全问题,但还是存在不足和安全隐患. notifyAll方法唤醒了线程池中全部的线程, 这并不是我们想要的! 而且,同步套同步很容易发生死锁! 在JDK1

Java简介

what?是一门面向对象的高级编程语言创始人詹姆斯 高斯林(Java之父)发展1995年5月23日 诞生1996年1月23日 JDK1.0 1997年 JDK1.1 1998年12月4日 JDK1.22014年3月10日 JDK1.8特性:简单:面向对象:跨平台:健壮性:安全性:多线程 Java平台的三个版本:JavaSE.JavaEE.JavaME Java技术分为Java编程语言和Java平台 Java平台的两个主要组件:Java虚拟机(JVM).Java应用程序编程接口(API)

ArrayList(jdk 1.7.0_80)

jdk1.7中有几个更新,List<Integer> l = new ArrayList();是允许的,更多的jdk1.7特性可参考:陈大大博客 http://blog.csdn.net/chenleixing/article/details/47802653. 看源码, 1 public class ArrayList<E> extends AbstractList<E> 2 implements List<E>, RandomAccess, Clonea

project notes

1.根目录: String rootPath = application.getRealPath("/"); 2.文件是否可写: public boolean isCanWrite(String dirPath) { File file = new File(dirPath); if(!file.exists()) { file.mkdir(); } if(file.canWrite()) { return true; } else{ return false; } } 3.两个工具类

第四章 选择结构(二)

一.本章目标 掌握switch选择结构 能够综合运用if选择结构和switch选择结构解决问题 二.内容 1 swith 选择结构 1.1 为什么使用switch选择结构 问题: 韩嫣参加计算机编程大赛 如果获得第一名,将参加麻省理工大学组织的1个月夏令营 如果获得第二名,将奖励惠普笔记本电脑一部 如果获得第三名,将奖励移动硬盘一个 否则,不给任何奖励 public class Compete { public static void main(String[] args) { int ming

第3章 包装类&amp;正则表达式

1.1 包装类在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类型等.那么,想实现字符串与基本数据之间转换怎么办呢?Java中提供了相应的对象来解决该问题,基本数据类型对象包装类:java将基本数据类型值封装成了对象.封装成对象有什么好处?可以提供更多的操作基本数值的功能.8种基本类型对应的包装类如下:其中需要注意int对应的是Integer,ch

Java 中的 File

1. File 代表文件或者目录(文件夹)的类 练习:删除目录 思路分析:写一个单独的方法来删除目录或者文件:判断是一个目录(isDirectory)还是是一个文件(isFile):如果是文件直接删除,如果是目录,获取这个目录下的所有子目录和子文件 --- 后续功能和当前方法要完成的功能是一致的 --- 递归 练习:统计工作空间中 Java 文件和 class 文件的个数 思路分析:定义一个新的方法进行统计:先获取工作空间中所有的子文件和子目录.如果是子目录 --- 递归:如果是子文件,需要判断

preliminary-&gt;advanced Exam 11.17

Back & Forth vol.1 1.forEach知识点: JDK1.8之后才提供了forEach循环(JDK1.8特性) forEach遍历时无需获得数组长度 forEach遍历时无需根据索引访问元素 此后需要了解JDK新版本的new features 2.数组声明+创建的几种方式: 声明: double[ ]  array   (首选) double array[ ] 创建:Java用new或挨个赋值方式 3.int类型数组默认值问题 int[ ] arr = new int[10];

JDK各个版本的新特性jdk1.5-jdk8

JDK各个版本的新特性 对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.今天先为大家介绍一下JDK1.5版本到JDK1.7版本的特性.希望能给予帮助. JDK1.5新特性: 1.自动装箱与拆箱: 自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中. 自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再去调用intValue(