Java高新技术 JDK1.5之新特性
Java高新技术 JDK1.5的新特性
知识概要:
(1)静态导入
(2)可变参数
(3)增强for循环
(4)基本数据类型的自动拆箱和装箱
静态导入
import语句可以导入一个类或某个包中的所有类
import static语句导入一个类中的某个静态方法或所有静态方法
语法举例:
import static java.lang.Math.sin;
import static java.lang.Math.*;
代码示例
<span style="font-size:18px;">package cn.itheima.day1; import static java.lang.Math.*;
class StaticImport
{
public static void main(String[] args)
{
System.out.println(max(3,6));
System.out.println(abs(-6));
}
}
</span>
好处:使用静态导入可以简化程序对类静态属性和方法的调用,并且简化了程序代码的书写。
弊端:
虽然JDK中出现了这个新特性,但是如果我们在自己的类中定义 了一个方法,与导入的类中的静态方法一样。
那Java虚拟机怎么知道用的是那个类的方法呢?所以虽然出现了这个新特性,但是建议还是别使用。
注意:如果将Javac设置为了Java 5.0以下,那么静态导入等JDK
1.5的特性都会报告错误。
可变参数
问题:一个方法接受的参数个数不固定,例如:
System.out.println(countScore(2,3,5));
System.out.println(countScore(1,2,3,5));
可变参数的特点: 只能出现在参数列表的最后;...位于变量类型和变量名之间,前后有无空格都可以;
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
package cn.itheima.day1; class VarableParameter
{
public static void main(String[] args)
{
System.out.println(add(2,3));
System.out.println(add(2,3,3,4));
System.out.println(add(22,2,2,2));
}
public static int add(int a ,int...arr)
{
int sum = 0; /*for (int x = 0;x<arr.length ;x++ )
{
sum+=arr[x];
}*/
for (int arg: arr )
{
sum +=arg;
}
return sum ;
}
<span style="font-size:18px;">}
</span>
可变参数的原理:
调用可变参数的方法时, 编译器将自动创建一个数组保存传递给方法的可变参数。
因此,程序员可以在方法体中以数组的形式访问可变参数可变参数只能处于参数列表的最后。
所以一个方法最多只能有一个可变参数。
可变参数特点与注意事项:
1、可变参数只能出现在参数列表的最后。2、可变参数只能在参数中只能有一个。3、可变参数位于变量类型和变量名之间,前后有无空格都可以。4、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
增强for循环:
引入增强for循环的原因:
在JDK 1.5 以前的版本中,遍历数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦!
因此JDK 1.5 中定义了一种新的语法——增强for循环,以简化此类操作。
语法格式:for(修饰符 变量类型 变量 :需迭代的数组或集合){}
语法:
for ( type 变量名:集合变量名 ) { … }
注意事项:
迭代变量必须在( )中定义!
集合变量可以是数组或实现了Iterable接口的集合类
举例:
public static int add(int x,int ...args)
{
int sum = x;
for(int arg:args) {
sum += arg;
}
return sum;
}
自动装箱和拆箱
自动装箱:
Integer num1 = 12;
自动拆箱:
System.out.println(num1 + 12);
基本数据类型的对象缓存:
Integer num1 = 12;
Integer num2 = 12;
System.out.println(num1 == num2);
Integer num3 = 129;
Integer num4 = 129;
System.out.println(num3 == num4);
Integer num5 = Integer.valueOf(12);
Integer num6 = Integer.valueOf(12);
System.out.println(num5 == num6);
JDK 1.5的语法允许开发人员把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 类型的变量, 这个过程称之为自动装箱。
自动拆箱与自动装箱与之相反,即把包装类对象直接赋给一个对应的基本类型变量。
byte常量池
对于这些基本数据整数要装箱成Integer对象的时候,如果这个数据在1字节(-128
~ 127)之内的数字,就缓存在byte常量池,下次再用到的时候,先看池子里面有没有,如果有直接从池子里面拿来用。这样节省了内存空间。
这是一种设计模式叫做享元模式。(flyweight)
享元应用:
1、Word中输入英文字母,可创建26对象。
每个对象值是出现的位置不同(坐标),所以可用一个对象调用位置的方法。
如,字母Q:Q.zuobiao(int x,int y),将高度重复使用的char类型的字母Q封装成一个对象使用。
2、图标:Window下的文件夹图标,只是名称属性不同,包含了很多其他相同属性,那么可以应用享元模式。
package cn.itheima.day1; class AutoBox
{
public static void main(String[] args)
{
Integer m = 128;
Integer n = 128; System.out.println("m==n "+(m==n)); Integer a = 127;
Integer b = 127; System.out.println("a==b "+(a==b)); }
}
Java高新技术 JDK1.5之新特性的更多相关文章
- java 1.7 1.8新特性
在JDK1.7的新特性方面主要有下面几方面的增强:1.jdk7语法上1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头.1.2 Switch语句支持string类型1.3 Try-wit ...
- Java9发布回顾Java 8的十大新特性
java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9. 今天,我们先来一起复习一下2014年发布的Java 8的十大新特性.先来喝杯java~~~ 按 ...
- 多线程(JDK1.5的新特性互斥锁)
多线程(JDK1.5的新特性互斥锁)(掌握)1.同步·使用ReentrantLock类的lock()和unlock()方法进行同步2.通信·使用ReentrantLock类的newCondition( ...
- Java学习:JDK8的新特性
Java学习:JDK8的新特性 一.十大特性 Lambda表达式 Stream函数式操作流元素集合 接口新增:默认方法与静态方法 方法引用,与Lambda表达式联合使用 引入重复注解 类型注解 最新的 ...
- Java 各个版本中的新特性
新特性你知道多少? Java 8 Lambda 表达式 接口增加默认方法等 方法引用 流 Stream Java 9 模块系统 交互式工具jshell .of() 创建不可变集合 接口支持私有方法 更 ...
- JAVA JDK1.5-1.9新特性
1.51.自动装箱与拆箱:2.枚举(常用来设计单例模式)3.静态导入4.可变参数5.内省 1.61.Web服务元数据2.脚本语言支持3.JTable的排序和过滤4.更简单,更强大的JAX-WS5.轻量 ...
- java--加强之 jdk1.5简单新特性,枚举,注解
转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9944041 Jdk1.51新特性(静态导入,可变参数,加强for循环,自动拆装箱) 08.ja ...
- 各版本JDK1.5-1.8新特性
概述 一jdk15新特性 泛型 foreach 自动拆箱装箱 枚举 静态导入Static import 元数据Metadata 线程池 Java Generics 二jdk16新特性 Desktop类 ...
- Java基础和JDK5.0新特性
Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...
随机推荐
- Bash 脚本进阶,经典用法及其案例
前言:在linux中,Bash脚本是很基础的知识,大家可能一听脚本感觉很高大上,像小编当初刚开始学一样,感觉会写脚本的都是大神.虽然复杂的脚本是很烧脑,但是,当我们熟练的掌握了其中的用法与技巧,再多加 ...
- sqlserver关联更新问题
大家都知道update更新语句:update 表名 set 字段=值.似乎很简单 但是今天我遇到这样一个问题:我需要更新一张叫PO_SPECIAL_TASK_LINE表的score字段,这个分数通过另 ...
- CCIE-MPLS基础篇-实验手册
又一部前期JUSTECH(南京捷式泰)工程师职业发展系列丛书完整拷贝. MPLS(Multi-Protocol Label Switching) 目录 1:MPLS 基础实验.... 1.1实验拓扑. ...
- 201521123084 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题目 ...
- 团队作业8——第七天(beta阶段)
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 学号 成员 贡献比 201421123001 廖婷婷 16% 201421123002 翁珊 17% 201421123004 ...
- Java学习5——标识符和关键字
标识符: 1.Java对各种变量.方法和类等要素命名时使用的字符串序列称为标识符.凡是自己可以起名字的地方都叫标识符,都要遵守标识符的规则. 2.Java标识符命名规则: 标识符由字母.下划线&quo ...
- 学号:201521123116 《java程序设计》第三周学习总结
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点. 书面作业 Q1:代码阅读 pu ...
- 201521123097《Java程序设计》第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...
- python日记_01 python实现6个人围成一圈,扔到第三个人出局,循环扔的问题。
#!/usr/bin/python shoplist=['mango','apple','carrot','banana','oracle','python'] length = len(shopli ...
- virtualbox修改主机名
virtualbox修改主机名 /etc/hostname /etc/hosts