[[:oktatas:programozás:java|< Java]] ====== Java specialitások ====== * **Szerző:** Sallai András * Copyright (c) 2011, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Osztályok mezői, metódusainak kiíratása ===== A Java nyelven létezik egy Class osztály. Ezzel lekérdezhetők egy osztály metódusai, konstruktorai, mezői stb. import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.io.*; class ref { public static void main(String[] args) { try { // Megadjuk melyik osztályra vagyunk kíváncsiak Class cl = Class.forName("java.lang.Thread"); // getDeclaredFields() a konstruktorok lekérdezése Constructor cnst[] = cl.getConstructors(); // getFields() az osztály deklarált mezőit adja vissza Field fld[] = cl.getDeclaredFields(); // getMethods() az osztály deklarált metódusait adja vissza Method mtd[] = cl.getMethods(); System.out.println("Az osztály konstruktorai"); for (int i = 0; i < cnst.length; i++) { System.out.println(cnst[i].getName()); } System.out.println("A mezők nevei"); for (int i = 0; i < fld.length; i++) { System.out.println(fld[i].getName()); } System.out.println("Metódusok nevei"); for (int i = 0; i < mtd.length; i++) { System.out.println(mtd[i].getName()); } } catch (ClassNotFoundException e) { e.printStackTrace(); } try { System.in.read(); } catch(Exception e) {} } } using System; using System.Reflection; class Program { static void Main() { Console.WriteLine("Egy objektumon milyen metodusok hasznalhatok"); Object obj = new Object(); Type t = obj.GetType(); foreach (MethodInfo mi in t.GetMethods()) Console.WriteLine(mi.Name); } } ==== Linkek ==== * http://www.java2s.com/Code/CSharp/Reflection/MethodInfo.htm ===== Dinamikus adatszerkezetek ===== A teljesség igénye nélkül: * Class LinkedList * Class ArrayList * Class Hashtable * Class HashMap ===== Statikus importálás ===== Statikus importálás esetén nem szükséges újból és újból beírni egy osztály nevét. Elég a mező vagy metódus nevét. import static java.lang.Math.PI; import static java.lang.Math.pow; class Program01 { public static double gombTerfogat(double sugar){ return 4*PI*pow(sugar,2); } public static void main(String args[]) { System.out.println(gombTerfogat(30)); } } Az összes metódus importálható egyszerre: import static java.lang.Math.*; A System osztály: import static java.lang.Math.PI; import static java.lang.Math.pow; import static java.lang.System.out; class Program01 { public static double gombTerfogat(double sugar){ return 4*PI*pow(sugar,2); } public static void main(String args[]) { out.println(gombTerfogat(30)); } } ===== A math csomag ===== Olyan számváltozókat hozhatunk létre velük amelyek sosem tudnak túlcsordulni. Osztályok: * BigDecimal (Tetszőleges pontosságú valós) * BigInteger (tetszőleges pontosságú egész) import java.math.BigInteger; class Program { public static void main(String args[]) { BigInteger a = new BigInteger("30"); System.out.println(a.intValue() * 2); } } ==== Faktoriális nagy számokkal ==== import java.math.BigInteger; class Program01 { private static BigInteger fact(int n){ BigInteger bd = null; if(n==0){ bd = new BigInteger("1"); }else{ bd = new BigInteger("1"); for(int i=1;i<=n;i++){ bd = bd.multiply(BigInteger.valueOf(i)); } } return bd; } public static void main(String[] args) { System.out.println(fact(1000)); } } ==== A sztringek ==== A Java nyelvben a String osztály implementálja a következő interfészeket: * Serializable * CharSequence * Comparable Így sokszor String típus helyett az API dokumentációban CharSequence látható. * https://docs.oracle.com/javase/8/docs/api/java/lang/String.html (2024) * https://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html (2024) ===== Linkek ===== * http://java.inf.elte.hu/java-1.2/matematika/index.html