jdK1.5 新特性
----------- android培训、java培训、java学习型技术博客、期待与您交流!
------------ 1. Eclipse简介和使用
IDE(Integrated Development Environment ): 集成开发环境,集合开发、运行、调试于一体的一个软件
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。
下载地址: http://www.eclipse.org/
1.1. 管理:
工作空间(workspace)、工程(project)
workspace
工作空间:代码保存在硬盘的空间建议按照班级号(20130608)
注意:工作空间命名不建议选择带中文或者空格的例如(Program Files就不可以)
Java Project
java工程(Java Project):Java Project管理所有的java源程序和class文件
File ->new Java Project -à指定Java工程名 在学习中习惯按照时间命名(例如day01)
1.2. 使用
1. 创建Java工程
File --> new ----> java Project
2. 创建类
包名
可以不指定,是default package
建议指定包名
类名
修饰符只能是 public default abstract final
abstract final 不能同时出现
注意: 只有内部类才可以加private static 修饰
父类
可以指定父类,默认是java.lang.Object
接口
可以指定接口
创建方法
main
3. 编程
可以使用使用快捷键,提高开发效率.
4. 运行
右键单击要运行的java文件---> run as ----> java application
1.3. 常用快捷键
快捷键的配置,常用快捷键:
内容提示:
Alt + /
例如: System.out.println(); 语句 ,syso再按住alt 和/ 就会补全.
忘记某个类如何书写,可以写出一部分,按住alt 和/ 就会有提示.
快速修复:
Ctrl + 1
例如,程序有编译期异常,或者需要导包.使用该快捷键.会有相关提示.
导包:
ctrl+1
Ctrl + shift + O
如果需要导入的包比较多,可以一次性全部导入,也会将多余的包清理掉.
格式化代码块:
Ctrl + Shift + F
注意和搜狗输入法的简繁切换快捷键冲突.
代码位置调换:
Alt+上下键
添加/除去单行注释
Ctrl+/
添加/除去多行注释
Ctrl+Shift+/
Ctrl+Shift+\
大小写转换
更改为大写 Ctrl+Shift+X
更改为小写 Ctrl+Shift+Y
复制行
Ctrl+Alt+向下键
删除:
1.Ctrl + D 删除当前行
自动补全
Ctrl+2+L
例如:如果调用方法有返回值,该快捷键可以自动创建变量接受.
查看源代码
1、Ctrl+单击 需要查看源码的类
2、Ctrl+Shift+T
重置透视图:window->reset perspective
当eclipse 的Java视图变的很乱的时候,就可以重置透视图,还原为最初的界面.
其它:参考<<快速上手Eclipse快捷键指南>>
1.4. 自定义快捷键
注意: 快捷键的冲突:
例如: 输入法的简繁体切换 就是ctrl +shift+f .
Windows Preferences 输入key 点击keys
例如设置 alt+/ 此时弹出对话框中输入alt+/ 此时显示已被Eclipse默认设置,
但是不是我们需要的.可以点击Remove binding来解除绑定
重新设置 输入Content Assist(内容助理) binding 内输入alt+/ 然后点击apply
Java->Compiler->Errors/Warnings
Generic types 忽略
背景颜色
185 232 190
General->Editors->Text Editors ->background color
1.5. 类的创建
(方法、构造函数、封装)
在类中鼠标右键点击Source .可以选择创建hashCode 方法,equals方法, toString方法.可以创建无参数构造,有参数构造.根据成员变脸的get set方法.
方法的抽取
选中需要抽取为方法的代码块,鼠标右键Refactor ->Extract method ->输入方法名.
变量的重命名
如果一个类中该变量重复较多,需要一个个修改,可以选中该变量名,然后Refactor ->Rename ,同名的变量都会修改.
2. JDK5特性
JDK5中新增了很多新的java特性,利用这些新语法可以帮助开发人员编写出更加清晰,安全,高效的代码。
静态导入
自动装箱/拆箱
增强for循环
可变参数
枚举
泛型
2.1. 静态导入(了解)
JDK 1.5 增加的静态导入语法用于导入类的某个静态属性或方法。使用静态导入可以简化程序对类静态属性和方法的调用。
语法:
import static 包名.类名.静态属性|静态方法|*
例如:
import static java.lang.System.out
import static java.lang.Math.*
import static java.lang.System.out;
import static java.lang.Math.*;
public class Demo {
public static void main(String[] args) {
// 普通写法
System.out.println("hello world");
int max = Math.max(100, 200);
System.out.println(max);
// 静态导入
out.println("hello world");
int max2 = max(100, 200);
System.out.println(max2);
}
}
2.2. 增强for循环
引入增强for循环的原因:在JDK5以前的版本中,遍历数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦!
因此JDK5中定义了一种新的语法——增强for循环,以简化此类操作。增强for循环只能用在数组、或实现Iterable接口的集合类上
语法格式:
for(变量类型 变量 :需迭代的数组或集合){}
For each是为了让你的代码变得简捷、和容易维护。
它的速度也普通遍历的速度是一致的。
2.3. 可变参数
JDK中具有可变参数的类Arrays.asList()方法。
分别传多个参、传数组,传数组又传参的情况。
注意:传入基本数据类型数组的问题。
从JDK 5开始, Java 允许为方法定义长度可变的参数。
语法:数据类型…变量名。
可变长参数是Object[] 数组。(可变参数里存的是对象数组)
JDK中的典型应用:
Arrays.asList(T…a)是jdk中的典型应用。
需求:对若干个整数进行求和
public static int sum1(int a,int b ) {
return a+b;
}
若干个整数求和如何解决?
可以使用数组接收整数。
public static int sum1(int[] numbers) {
if (numbers == null) {
return 0;
}
if (numbers.length == 0) {
return 0;
}
int sum = 0;
for (int num : numbers) {
sum += num;
}
return sum;
}
可以使用可变参数
public static int sum2(int... numbers) {
if (numbers == null) {
System.out.println("可变参数的值为null");
return 0;
}
if (numbers.length == 0) {
System.out.println("可变参数的值的长度为0");
return 0;
}
int sum = 0;
for (int num : numbers) {
sum += num;
}
return sum;
}
可变参数的使用
public static void main(String[] args) {
// int result = sum1(new int[] { 1, 3, 5, 7, 9 });
// System.out.println(result);
// // 使用了可变参数,传一个数组进去
// int result = sum2(new int[] { 1, 3, 5, 7, 9 });
// System.out.println(result);
// 使用了可变参数,不必声明数组,简化书写
// int result = sum2(2, 4, 6, 8, 10);
// int result = sum2(1);
int result = sum2();
System.out.println(result);
}
可变参数的细节
声明:
在一个方法中,最多只能有一个可变参数。
可变参数只能放在参数列表的最后面。
调用:
当使用可变参数时,可以传0或多个参数。
当使用可变参数时,也可以传一个数组进去,就表示多个参数。
使用:
在方法内部使用时,就是在使用一个数组。
当调用时没有传参数时(传了0个),这时在方法内部的参数数组是有值的(不为null),但长度为0.
2.4. 自动装箱/拆箱
自动装箱:指开发人员可以把一个基本数据类型直接赋给对应的包装类。
自动拆箱:指开发人员可以把一个包装类对象直接赋给对应的基本数据类型。
典型应用:
List list = new ArrayList();
list.add(1);
//list.add(new Integer(1));
int i=list.get(0);
//int j = (Integer)list.get(0);
2.4.1. 基本数据类型包装类
包装类 基本数据类型
Byte
byte
Short
short
Integer
int
Long
long
Boolean
boolean
Float
float
Double
double
Character
char
对象变基本数据类型:拆箱
基本数据类型包装为对象:装箱
为了使得java的基本类型有更多的功能,java为其所有的基本类型提供了包装类来封装常见的功能。如:最大值、数值转换等。
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
所属的包:java.lang.*
常见应用一:
获取最大最小值MAX_VALUE / MIN_VALUE
整数类型最大值
Integer.MAX_VALUE
System.out.println(Integer.MIN_VALUE);// -2147483648
System.out.println(Integer.MAX_VALUE);// 2147483647
应用二:
基本数据类型和字符串之间的转换
例:Integer的parseInt方法,intValue方法
基本数据类型转换成字符串:
1:基本数据类型+””
2:基本数据类型.toString(基本数据类型值);
例如 Integer.toString(34); //将34变成了”34”
基本数据类型转字符串
int i=100;
String str=100+"";
String string = Integer.toString(100);
字符串变基本数据类型
基本数据类型 a=基本数据类型包装类.parse基本数据类型(String str);
str="123";
int parseInt = Integer.parseInt(str);
System.out.println(parseInt);
注意:
public static int parseInt(String s)
Integer类中的parseInt方法是静态的 参数必须是数字格式
Double
str = "3.14";
double parseInt2 = Double.parseDouble(str);
System.out.println(parseInt2);
boolean b = Boolean.parseBoolean("true");
应用三:
进制转换:
十进制转成其他进制.
toBinaryString(int i)
以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
toHexString(int i)
以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
toOctalString(int i)
以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
那么其他进制转成十进制
parseInt(String radix);
parseInt(String s, int radix)
使用第二个参数指定的基数,将字符串参数解析为有符号的整数。
十进制转其他进制
// 十进制转二进制
String binaryString = Integer.toBinaryString(100);
System.out.println(binaryString); // 1100100
// 十进制转十六进制
String hexString = Integer.toHexString(100);
System.out.println(hexString); // 64
// 十进制转八进制
String octalString = Integer.toOctalString(100);
System.out.println(octalString); // 144
其他进制转十进制
// 字符串转对应的进制
int parseInt3 = Integer.parseInt(octalString);
System.out.println(parseInt3);
// 二进制转十进制
int parseInt4 = Integer.parseInt(binaryString, 2);
System.out.println(parseInt4);
// 十六进制转十进制
int parseInt5 = Integer.parseInt(hexString, 16);
System.out.println(parseInt5);
// 八进制转十进制
int parseInt6 = Integer.parseInt(octalString, 8);
System.out.println(parseInt6);
JDK5.0后出现了自动装箱和拆箱
JDK5.0以后,简化了定义方式。
Integer x = new Integer(5);//装箱
int intValue = x.intValue(); //拆箱
// 5.0简化书写
// 自动装箱。new Integer(5);
Integer y = 5;
// 对象加整数,x 进行了自动拆箱,变成了int 型 和5进行加法运算后再将和进行装箱赋给x。
y = y + 5; // 是通过Integer.intValue() 方法进行拆箱
练习:
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
System.out.println(a == b);
Integer c = 128;
Integer d = 128;
System.out.println(c == d);
}
请问结果?
a==b 为true 因为a和b指向了同一个Integer 对象.
Integer的缓存大小-128 ~127 之间也就是byte的范围。
2.5. 枚举类
有时候,变量的取值只是在一个有范围内,例如:服装的尺寸有小,中,大,和超大尺寸.我们可以将这些尺寸定义为定义变量并保存值为 1,2,3,4 或者S M L X ,这样可以解决问题.但是变量很有可能保存了一个错误的值(0 或者m)
一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。
例如: 交通灯(红、黄、绿) 性别(男、女) 星期(星期一、二、三…..)
分数等级(A、B、C、D、E)
JDK 5新增的 enum 关键字用于定义一个枚举类。
枚举的实现
使用enum定义枚举类
在枚举类中定义枚举值(大写)
enum Gender {
MALE, FEMALE;
}
使用javap命令
发现其中每一个枚举值都是枚举类的具体实例对象.只不过是静态常量.
枚举类具有如下特性:
枚举类也是一种特殊形式的Java类。
枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数.
public class Demo1 {
public static void main(String[] args) {
Gender male = Gender.MALE;
System.out.println(male.getInfo());
}
}
enum Gender {
MALE("男"), FEMALE;
// 成员变量
private String info;
// 构造函数
private Gender() {
}
private Gender(String info) {
this.info = info;
}
// 成员方法
public String getInfo() {
return info;
}
}
枚举类可以声明抽象方法,但是要有具体的枚举值去实现.
public class Demo1 {
public static void main(String[] args) {
Gender male = Gender.MALE;
System.out.println(male.getInfo());
male.speak();
}
}
enum Gender {
MALE("男") {
@Override
public void speak() {
System.out.println("是男人");
}
},
FEMALE {
@Override
public void speak() {
System.out.println("是女人");
}
};
// 成员变量
private String info;
// 构造函数
private Gender() {
}
private Gender(String info) {
this.info = info;
}
// 成员方法
public String getInfo() {
return info;
}
public abstract void speak();
}
枚举类也可以实现接口(序列化)、或继承抽象类。
JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型(enum)。
public class Demo2 {
public static void main(String[] args) {
WeekDay mon = WeekDay.MON;
switch (mon) {
case MON:
System.out.println("星期一要上班...");
break;
case TUE:
System.out.println("星期二,继续上班...");
break;
}
}
}
enum WeekDay {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
若枚举类只有一个枚举值,则可以当作单态设计模式使用。
练习:
请编写一个关于星期几的枚举WeekDay,要求:枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun 该枚举要有一个方法,调用该方法返回中文格式的星期。
enum WeekDay {
MON {
@Override
public String getInfo() {
return "星期一";
}
},
TUE {
@Override
public String getInfo() {
return "星期二";
}
},
WED {
@Override
public String getInfo() {
return "星期三";
}
},
THU {
@Override
public String getInfo() {
return "星期四";
}
},
FRI {
@Override
public String getInfo() {
return "星期五";
}
},
SAT {
@Override
public String getInfo() {
return "星期六";
}
},
SUN {
@Override
public String getInfo() {
return "星期天";
}
};
public abstract String getInfo();
}
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------