通过引入泛型,我们将获得编译时类型的安全和运行时更小地抛出 ClassCastExceptions的可能。在JDK1.5中,你可以声明一个集合将接收/返回的对象的类型。
之前:
List listOfEmployeeName = new ArrayList();
现在:
List<String> listOfEmployeeName = new ArrayList<String>();
更方便的遍历,免于使用for(int i = 0; i < list.size(); i++)
这样的复杂写法。
foreach语法格式
for(ElementType element:arrayName){};
主要处理Integer、Double等这样的包装类
之前
Integer age= new Integer(30);
Integer ageAfterTenYear= new Integer(age.intValue +10);
现在
Integer ageAfterTenYear= age +10; //自动解封
public class Font {
public static final int COLOR_RED = 1;
public static final int COLOR_BLUE = 2;
.......
}
一经改变,全部要重新编译;如果成员为String类型,比较起来也会比较麻烦,需要使用equals()
方法,这样效率比使用==
要低很多。
enum Color
{
RED(1),BULE(2); //public static final 类型
private int num;
Color(int num) // private constructor
{
this.num = num;
}
}
==
来判断,效率是比较高的。public int getValue() { return this.value; }
import org.yyy.pkg.Increment;
….
return var + Increment.INC;
只要import了package,那么就可以不写类名直接调用
return var + INC
参数个数不确定,但是类型确定的情况下,Java把可变参数当做数组处理
public class Main
{
private static int add(int a, int... args)
{
int ret = 0;
for (Integer num : args)
ret += num;
return ret;
}
public static void main(String[] args)
{
System.out.println(add(1));
System.out.println(add(1, 2));
System.out.println(add(1, 2, 3));
}
}
Java JDK中提供了一套 API(如 PropertyDescriptor) 用来访问某个属性的 getter/setter 方法,这就是内省。
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
class StuInfo
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Override
public String toString()
{
return "StuInfo [name=" + name + "]";
}
}
public class Main {
public static void main(String[] args) throws Exception
{
StuInfo stuInfo = new StuInfo();
PropertyDescriptor namePropertyDescriptor = new PropertyDescriptor(
"name", StuInfo.class);
Method setNameMethod = namePropertyDescriptor.getWriteMethod();
setNameMethod.invoke(stuInfo, "Rafe");
System.out.println(stuInfo);
}
}
J2EE相关的优化,详情见参考文献
可以利用ScriptEngine API在Java里面编写并执行脚本程序,首先创建一个ScriptEngineManager对象,再通过ScriptEngineManager获得ScriptEngine对象,最后用ScriptEngine的eval方法执行脚本。
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Main {
public static void main(String[] args) throws Exception
{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval("print(\"HelloWorld\")");
}
}
原来的JTable基本上是只能显示数据,在JDK6新增了对JTable的排序和过滤功能
一种用Java和XML开发Web Services应用程序的框架,是Java Architecture for XML Web Services的缩写
JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server
是一个pure java的数据库,现在已经被列入到java1.6中。
public class Main
{
public static void main(String[] args) throws Exception
{
String line = "condition_2";
switch (line)
{
case "condition_1":
System.out.println("condition_1");
break;
case "condition_2":
System.out.println("condition_2");
break;
}
}
}
List<String> tempList = new ArrayList<>(); // <>也称为钻石运算符Diamond Operator
Java 7 的 try可以自动调用资源的close函数。
public class Main
{
public static void main(String[] args)
{
try
{
BufferedReader reader = new BufferedReader(
new InputStreamReader(System.in));
String line = reader.readLine();
reader.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(System.in));)
{
String line = reader.readLine();
} catch (Exception e)
{
e.printStackTrace();
}
int million = 1_000_000
Java 7 推出了对异常的“multi-catch”功能,简化了处理方式
public class Main
{
public static void main(String[] args)
{
try
{
myMethod();
} catch (IOException e)
{
e.printStackTrace();
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
}
private static void myMethod() throws IOException,IndexOutOfBoundsException
{
}
}
public class Main
{
public static void main(String[] args)
{
try
{
myMethod();
} catch (IOException | IndexOutOfBoundsException e)
{
e.printStackTrace();
}
}
private static void myMethod() throws IOException,IndexOutOfBoundsException
{
}
}
NIO 2.0 带来了很多增强功能。它同时推出了几个新的class来帮助开发者减轻处理多文件系统时的工作压力。详见API文档。
fork/join框架是用多线程的方式实现分治法来解决问题。fork指的是将问题不断地缩小规模,join是指根据子问题的计算结果,得出更高层次的结果。具体请看大神的总结Java线程之fork/join框架
Java7推出了一个新的特性“invoke dynamic”。这然JVM变得可以去包含非Java语言的需求。一个新的包java.lang.invoke已经被创建去帮助拓展对动态语言的支持。
亲测无效,编译不通过,报语法错误
以下这些:
都是来着org.apache.commons.lang3.SystemUtils,不是JDK的特性。这里误用了文章What methods should go into a java.util.Objects class in JDK 7的内容。
参考网址:https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/SystemUtils.html
关于
JDK 中并没有Booleans这样的类。这些方法都是出自一篇名为What methods should go into a java.util.Objects class in JDK 7的文章,注意文章的标题,这只是一封建议信,并不是最后JDK 1.7 的方案。
理由同上,同样滥用了What methods should go into a java.util.Objects class in JDK 7里面的内容。
理由同上,同样滥用了What methods should go into a java.util.Objects class in JDK 7里面的内容。