Java Language
Java SE 7-funktioner
Sök…
Introduktion
Anmärkningar
Nya Java SE 7-programmeringsspråk
- Binära bokstäver : De integrerade typerna (byte, kort, int och lång) kan också uttryckas med det binära talsystemet. Lägg till prefixet 0b eller 0B till siffran för att ange en binär bokstavskod.
- Strängar i switch-uttalanden : Du kan använda ett String-objekt i uttrycket för en switch-sats
- Try-with-resources-uttalandet : Try-with-resources-uttalandet är ett try-uttalande som förklarar en eller flera resurser. En resurs är som ett objekt som måste stängas efter att programmet är klart med det. Try-with-resources-uttalandet säkerställer att varje resurs är stängd i slutet av uttalandet. Alla objekt som implementerar java.lang.AutoCloseable, som inkluderar alla objekt som implementerar java.io.Closeable, kan användas som en resurs.
- Att fånga flera undantagstyper och återuppta undantag med förbättrad typkontroll : ett enda fångstblock kan hantera mer än en typ av undantag. Den här funktionen kan minska koddubblingen och minska frestelsen att få ett alltför brett undantag.
- Underscores i numeriska bokstäver : Vilket antal understreck som står (_) kan visas var som helst mellan siffror i en numerisk bokstav. Med den här funktionen kan du till exempel separera grupper med siffror i numeriska bokstäver, vilket kan förbättra din kods läsbarhet.
- Typinferens för skapande av generisk instans : Du kan ersätta de typargument som krävs för att åberopa konstruktorn i en generisk klass med en tom uppsättning typparametrar (<>) så länge kompilatorn kan dra slutsatsen av typargument från sammanhanget. Detta par vinkelfästare kallas informellt diamanten.
- Förbättrade kompilatorvarningar och -fel vid användning av icke-reifierbara formella parametrar med Varargs-metoder
Binära bokstäver
// An 8-bit 'byte' value:
byte aByte = (byte)0b00100001;
// A 16-bit 'short' value:
short aShort = (short)0b1010000101000101;
// Some 32-bit 'int' values:
int anInt1 = 0b10100001010001011010000101000101;
int anInt2 = 0b101;
int anInt3 = 0B101; // The B can be upper or lower case.
// A 64-bit 'long' value. Note the "L" suffix:
long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;
Try-with-resources-uttalandet
Exemplet läser den första raden från en fil. Den använder en instans av BufferedReader
att läsa data från filen. BufferedReader
är en resurs som måste stängas efter att programmet är klart med det:
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
I det här exemplet är resursen som deklareras i try-with-resources-uttalandet en BufferedReader
. Deklarationsförklaringen visas inom parentes omedelbart efter försök nyckelordet. Klassen BufferedReader
, i Java SE 7 och senare, implementerar gränssnittet java.lang.AutoCloseable
. Eftersom BufferedReader
instansen deklareras i ett try-with-resource-uttalande, kommer det att stängas oavsett om try-uttalandet slutförs normalt eller plötsligt (som ett resultat av metoden BufferedReader.readLine
kastar en IOException
).
Underscores i numeriska litteraler
Följande exempel visar andra sätt du kan använda understrecket i numeriska bokstäver:
long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;
Du kan endast placera understreck mellan siffror; Du kan inte placera understreck på följande platser:
- I början eller slutet av ett nummer
- Intill en decimal i en flytande punkt bokstavlig
- Innan ett F- eller L-suffix
- I positioner där en rad siffror förväntas
Skriv inferens för skapande av generiska instanser
Du kan använda
Map<String, List<String>> myMap = new HashMap<>();
istället för
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
Du kan dock inte använda
List<String> list = new ArrayList<>();
list.add("A");
// The following statement should fail since addAll expects
// Collection<? extends String>
list.addAll(new ArrayList<>());
för det kan inte sammanställas. Observera att diamanten ofta fungerar i metodsamtal; dock föreslås att du använder diamanten främst för variabla deklarationer.
Strängar i switch Uttalanden
public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
String typeOfDay;
switch (dayOfWeekArg) {
case "Monday":
typeOfDay = "Start of work week";
break;
case "Tuesday":
case "Wednesday":
case "Thursday":
typeOfDay = "Midweek";
break;
case "Friday":
typeOfDay = "End of work week";
break;
case "Saturday":
case "Sunday":
typeOfDay = "Weekend";
break;
default:
throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
}
return typeOfDay;
}