序文
Javaプラットフォームは、以来、それは最も人気の一つとして20年、Javaプログラミング言語となって、常に挑戦をはじめとする新興プログラミング言語の影響に直面しており、20年以上あり、これまでに登場しました。Javaはある静的強く型付けされた言語は、そのような言語機能は、Javaコンパイラができますコンパイル位相誤差を構築するためにどの、発見された安定した安全で堅牢なアプリケーションを、それが特に重要です。しかし、また、この機能により、特定の機能のJava開発者が少なく柔軟になっているように見える、開発と応用を許可し、他の言語でのコードの数倍の量であってもよいです。Java開発の欠点もますます複雑JDKに反映され、ますます複雑JDKは、開発者が完全に難易度が非常に大きくなる理解してみましょう。だから、開発者は、時にはすでに提供繰り返しJDKの機能を実現することが可能となります。
9から、Javaのバージョンをプログラミングするインターネットアプリケーションの開発のペースを維持するために焦点を当てているJDK、JDK各アップデートのテンポを調整するために始めた生産効率改善、JVMのパフォーマンスの実現モジュラーを、開発者がより多くの焦点を合わせることができるように、事業自体は、むしろよりも言語機能にあまりにも多くの時間を無駄にします。言語バランスの厳しさと柔軟性に発見されるJava言語を更新し、すべての後に、柔軟性がコーディングの複雑さを減らすが、厳格に複雑で堅牢なアプリケーションの礎を構築することであることができます。
Javaの7つの言語機能
JavaはJava 5のために強化されたバージョンは、そのようなジェネリック医薬品のこのバージョンで、自動ボクシングとアンボクシングの更新版が大幅に増加、列挙型、可変パラメータ、楽譜、その他のシリーズです重要な機能が、その後、Javaで6そして新たな主要な言語が備えていません。Java 5のは、2004年にリリースされた、それは非常に長くなっている、とJavaのオンラインチュートリアルも、ほとんどのJava 6に基づいており、そのため私は、Javaの各バージョンのJava 7紹介から新しい機能を開始するつもりです。
実行は、次のコードの全てに基づいて実証したJava 7を使用すると、次のコードを試してみてくださいもしそうなら、あなたがする必要がある、インストールして設定したバージョンで、すでにJDK 1.7をか。
1.スイッチの文字列
Javaの7の前に、構文整数型整数のみサポートを切り替えると、パッケージのこれらのタイプは、Java 7には、サポート文字列型の決意が、使用に非常に簡単です、クラスを決定しているが、実用性が高いです。
1.1。文字列の基本的な使い方を切り替えます
単純な文字列決意テストクラススイッチを書きます。
public class SwitchWithString {
public static void main(String[] args) {
String gender = "男";
System.out.println(gender.hashCode());
switch (gender) {
case "男":
System.out.println("先生你好");
break;
case "女":
System.out.println("女士你好");
break;
default:
System.out.println("你好");
}
}
}
スイッチ判定文字列を使用するのは簡単です、結果は、結果出力マッチング、明白な意志最初の出力のhashCode性別変数です「こんにちは先生。」
30007
先生你好
列スイッチを使用する場合、Java 5の列挙クラスと組み合わせた場合、効果が良好であるのJava 7の前に各値用にコンパイルする列挙クラスのデジタルコードを使用するに、Java 7は、文字列名の後に直接定義することができます。
1.2。文字列の実装原理を切り替えます
しかし、このサポートはちょうどサポートのコンパイラレベルであり、JVMはまだサポートされていません。列スイッチは、コンパイラは整数型に文字列を変換するときに決定されます。(JADファイル逆コンパイラツールを使用することができ、あなたはまた、中にアイデアでコンパイルされたクラスをダブルクリックすることができます)を検証するためのサポートのみ、コンパイラレベルが言うには、我々は、逆コンパイルスイッチの文字列にコンパイラを参照してください、生成されたクラスファイルを文字に変換しました文字列のhashCode判断、競合のhashCodeを防ぐために、裁判官が再び使用等しいです。
public class SwitchWithString {
public SwitchWithString() {
}
public static void main(String[] args) {
String gender = "男";
System.out.println(gender.hashCode());
byte var3 = -1;
switch(gender.hashCode()) {
case 22899:
if (gender.equals("女")) {
var3 = 1;
}
break;
case 30007:
if (gender.equals("男")) {
var3 = 0;
}
}
switch(var3) {
case 0:
System.out.println("先生你好");
break;
case 1:
System.out.println("女士你好");
break;
default:
System.out.println("你好");
}
}
}
トライして、リソース2
C ++からJava異なりは、開発者は、ほとんどの時間は、Java仮想マシンは私たちが管理を支援するための優れたリソースすることができ、メモリの各部分を管理する必要がありますが、また時々、手動でいくつかのデータベース接続などのリソース、ディスクファイルへのアクセス、ネットワーク接続などを解放する必要があります。言い換えれば、限り資源の限られた量では、我々は手動で解除する必要があります。
2.1。try-catch-最後に
限られたリソースで動作する場合、さまざまな例外が、それは舞台を読んだり、最終的な閉鎖リソースを実行中であるかどうか、発生する可能性があり、問題がある可能性があり、我々は通常、以下の方法を使用してtry-catch-finally
、リソースの解放を確保するために。
このように。
/**
* 释放资源
*
* @author www.codingme.net
*/
public class TryCatachFinally {
/**
* 异常处理
*
* @param args
*/
public static void main(String[] args) throws Exception {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream("jdk-feature-7.iml");
} catch (FileNotFoundException e) {
throw e;
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
throw e;
}
}
}
}
}
例外をキャッチするためには、この嫌なコードの構造を見て、私たちが書くcatch
、リソースの解放を確保するために、私たちが書いたfinally
資源を捕捉するためにリリースされたときに、リソースの解放をclose
スローされた例外を、私たちは書きましたtry-catch
。誰かがあなたはこのコードを持って話した場合は最後に、この複雑なコードを見てbug
、あなたは信じられないでしょう。しかし、確かにそれはとき、とても厳格なコードのロジックを思えtry
コードロジックおよびclose
方法異常が同時に発生した場合に、try
異常情報が失われます。
あなたはここに例を見ることができます。
package net.codingme.feature.jdk7;
import java.io.IOException;
/**
* 释放资源
*
* @author www.codingme.net
*/
public class TryCatachFinallyThrow {
/**
* 异常处理
*
* @param args
*/
public static void main(String[] args) throws Exception {
read();
}
public static void read() throws Exception {
FileRead fileRead = null;
try {
fileRead = new FileRead();
fileRead.read();
} catch (Exception e) {
throw e;
} finally {
if (fileRead != null) {
try {
fileRead.close();
} catch (Exception e) {
throw e;
}
}
}
}
}
class FileRead {
public void read() throws Exception {
throw new IOException("读取异常");
}
public void close() throws Exception {
System.out.println("资源关闭");
throw new IOException("关闭异常");
}
}
明らかに、コードread
およびclose
メソッドの例外を発生させるが、プログラムを実行するだけで受信たclose
例外に関する情報を。
资源关闭
Exception in thread "main" java.io.IOException: 关闭异常
at net.codingme.feature.jdk7.FileRead.close(TryCatachFinallyThrow.java:51)
at net.codingme.feature.jdk7.TryCatachFinallyThrow.read(TryCatachFinallyThrow.java:33)
at net.codingme.feature.jdk7.TryCatachFinallyThrow.main(TryCatachFinallyThrow.java:20)
情報の異常損失、および恐ろしい事は、あなたがそれだけだと思ったということであるclose
異常だけ発生した場合。
2.2。してみてください-autocloseable
Javaの7における上記の問題は、すでにJavaの7にするために、新しいソリューションを提供しているtry
リソースがあることを確認するために強化することが常に適切に解放することができます。強化使うtry
ことを前提にtry
クラスが実装AutoCloseable
インタフェース、実際にはニーズが多数のリソースのJavaの7のリリースで動作する、既にこのインターフェースを実装しています。
達成するためにAutoCloseable
強化でクラスをtry
シャットリソースを心配しないで、使用し、コールは自動的に完了し使用するclose
方法を、そして例外は失われません。
私たちが動作を達成するために、クラスのアナログリソースを書いてみましょうAutoCloseable
インターフェイスと強化された時try
の結果を見ることを。
package net.codingme.feature.jdk7;
/**
* 自动关闭
*
* @author www.codingme.net
*/
public class AutoCloseResource {
public static void main(String[] args) throws Exception {
try (Mysql mysql = new Mysql();
OracleDatabase oracleDatabase = new OracleDatabase()) {
mysql.conn();
oracleDatabase.conn();
}
}
}
class Mysql implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("mysql 已关闭");
}
public void conn() {
System.out.println("mysql 已连接");
}
}
class OracleDatabase implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("OracleDatabase 已关闭");
}
public void conn() {
System.out.println("OracleDatabase 已连接");
}
}
MySQLとOracleDatabaseテストクラスは、AutoCloseableを実現した結果を参照してください実行されます。
mysql 已连接
OracleDatabase 已连接
OracleDatabase 已关闭
mysql 已关闭
異常な情報が失われていないときに異常を確認し、テストするために異常なテストクラスのシミュレーションを書きます。
package net.codingme.feature.jdk7;
import java.io.IOException;
/**
* 释放资源
*
* @author www.codingme.net
*/
public class AutoCloseThrow {
public static void main(String[] args) throws Exception {
try (FileReadAutoClose fileRead = new FileReadAutoClose()) {
fileRead.read();
}
}
}
class FileReadAutoClose implements AutoCloseable {
public void read() throws Exception {
System.out.println("资源读取");
throw new IOException("读取异常");
}
@Override
public void close() throws Exception {
System.out.println("资源关闭");
throw new IOException("关闭异常");
}
}
実行ビュー例外情報。
资源读取
资源关闭
Exception in thread "main" java.io.IOException: 读取异常
at net.codingme.feature.jdk7.FileReadAutoClose.read(AutoCloseThrow.java:23)
at net.codingme.feature.jdk7.AutoCloseThrow.main(AutoCloseThrow.java:14)
Suppressed: java.io.IOException: 关闭异常
at net.codingme.feature.jdk7.FileReadAutoClose.close(AutoCloseThrow.java:29)
at net.codingme.feature.jdk7.AutoCloseThrow.main(AutoCloseThrow.java:15)
自動的に非常に明確で、シャットダウン、シャットダウンする例外があるSuppressed
異常、フォローアップ記事の意志の詳細を抑制するために呼ばれ、。
3.のtry-catch
Javaの7の前に、キャッチは、例外情報をキャッチすることができ、異常時のように多くの種類が非常に面倒であるときが、Java 7で、キャッチ複数の例外が情報をキャプチャすることができ、それぞれの間に挟ま使用例外|
部門、
package net.codingme.feature.jdk7;
import java.io.IOException;
/**
* 多异常捕获
*/
public class TryCatchMany {
public static void main(String[] args) {
try (TxtRead txtRead = new TxtRead()) {
txtRead.reader();
} catch (IOException | NoSuchFieldException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class TxtRead implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("资源释放");
}
public void reader() throws IOException, NoSuchFieldException {
System.out.println("数据读取");
}
}
なお、キャッチ例外複数の撮影時、繰り返し例外の種類が発生しないことができ、また、例外タイプは、別のクラスのサブクラス場合です。
4.バイナリ
Javaの7は、あなたが直接別の16進数を指定することができ、開始します。
- バイナリは、数値を指定し、唯一のあなたが使用する必要がある
0b
か、OB
先頭に。 - 番号指定の8進数は、使用し
0
始めています。 - 進数値で指定し、使用し
0x
始めています。
/**
* 二进制
*
* @author www.codingme.net
*/
public class Binary {
public static void main(String[] args) {
// 二进制
System.out.println("------2进制-----");
int a = 0b001;
int b = 0b010;
System.out.println(a);
System.out.println(b);
// 八进制
System.out.println("------8进制-----");
int a1 = 010;
int b1 = 020;
System.out.println(a1);
System.out.println(b1);
// 十六进制
System.out.println("------16进制-----");
int a2 = 0x10;
int b2 = 0x20;
System.out.println(a2);
System.out.println(b2);
}
}
出力。
------2进制-----
1
2
------8进制-----
8
16
------16进制-----
16
32
数字、アンダースコア
Javaの7のサポートは、デジタルに下線スタートの使用は、読みやすさの数を増やし、定義された時間をセグメント化。
/**
* 数字下环线
*
* @author www.codingme.net
*/
public class NumberLine {
public static void main(String[] args) {
int a = 1_000;
int b = 1_0__0_0_0_____00;
System.out.println(a);
System.out.println(b);
}
}
結果を取得します。
1000
1000000
6.おわりに
2011年初頭ほどのJava 7がリリースされましたが、これまで私は新しい構文を開始するには、Java 7の新機能を使用するために、見られるようにはあまりないので、始めて7から記事JDK Javaプログラムの私の新しいシリーズのように現在に導入されてきたがこれは、Javaの新しいバージョンが同時に更新した後、記事のこの新シリーズは継続的に更新され、Javaの13をリリースしました。
これはこれまでのところ、私はあなたの乗車を望む、すべての道を堅持していく所存です、高い山に行ってきました。
<エンド>
ウェブサイト: https://www.codingme.net
あなたがこの記事を楽しんでいる場合、あなたが一緒に成長、公共の数を集中することができます。
ノー世間の注目は、コアJavaのインタビュー仕上げ&コアな情報のネットワーク全体最もホットな知識のリソースへのアクセスルーチンに応答することはできません。