You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Nitelikli ve niteliksiz genel isim arama kurallarına göre bir isim ilgili sınıfta bulunamazsa taban sınıflara da bakılır.
/*---------------------------------------------------------------------------------------------------------------------- 19.09.2020 Nitelikli ve niteliksiz genel isim arama kurallarına göre bir isim ilgili sınıfta bulunamazsa taban sınıflara da sırasıyla bulununcaya veya bulunamayıncaya kadar bakılır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
Bb = newB();
b.bar(34);
System.out.printf("b.x=%d%n", b.x);
}
}
classBextendsA {
publicvoidbar(inta)
{
foo();
x = a;
}
}
classA {
publicintx;
publicvoidfoo()
{
System.out.println("A.foo");
}
}
sınıfın protected bölümü aynı paketteki diğer sınıflar için public'dir
/*---------------------------------------------------------------------------------------------------------------------- Hatırlanacağı gibi sınıfın protected bölümü aynı paketteki diğer sınıflar için public'dir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
}
}
classB {
publicvoidbar()
{
Aa = newA(/*...*/);
a.x = 20;
a.foo();
}
}
classA {
protectedintx;
protectedA(/*...*/)
{
//...
}
protectedvoidfoo()
{
}
}
sınıf içerisinde sınıfın her bölümüne erişilebilir
/*---------------------------------------------------------------------------------------------------------------------- Hatırlanacağı gibi sınıf içerisinde sınıfın her bölümüne erişilebilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
}
}
classA {
privateintm_x;
protectedvoidbar()
{}
voidtar()
{
}
publicvoidfoo()
{
Aa = newA();
a.m_x = 10;
a.tar();
a.bar();
}
}
protected bölüme türemiş sınıflar aşağıdaki gibi erişemez
Türemiş sınıf içerisinde kendisine ait olan taban sınıf bölümünün protected elemanlarına erişilebilir.
/*---------------------------------------------------------------------------------------------------------------------- Türemiş sınıf içerisinde kendisine ait olan taban sınıf bölümünün protected elemanlarına erişilebilir. Yani türemiş sınıf nesnesinin taban sınıf nesnesine ilişkin protected bölüme erişim geçerlidir----------------------------------------------------------------------------------------------------------------------*/packagemest;
importtest.A;
publicclassBextendsA {
publicB()
{
}
publicvoidbar()
{
x = 10;
foo();
}
}
packagetest;
publicclassA {
protectedintx;
protectedA(/*...*/)
{
//...
}
protectedvoidfoo()
{
}
}
AnalyticalCircle sınıfı ve test kodu (1)
/*---------------------------------------------------------------------------------------------------------------------- AnalyticalCircle sınıfı ve test kodu----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.math.geometry.AnalyticalCircle;
classApp {
publicstaticvoidmain(String [] args)
{
AnalyticalCircleanalyticalCircle = newAnalyticalCircle(-3.4, 100, 45);
System.out.printf("Yarıçap:%f%n", analyticalCircle.getRadius());
System.out.printf("Çevre:%f%n", analyticalCircle.getCircumference());
System.out.printf("Alan:%f%n", analyticalCircle.getArea());
System.out.printf("{x:%d, y:%d}%n", analyticalCircle.getX(), analyticalCircle.getY());
}
}
AnalyticalCircle sınıfı ve test kodu (2)
/*---------------------------------------------------------------------------------------------------------------------- AnalyticalCircle sınıfı ve test kodu----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.math.geometry.AnalyticalCircle;
classApp {
publicstaticvoidmain(String [] args)
{
AnalyticalCircleanalyticalCircle = newAnalyticalCircle();
System.out.printf("Yarıçap:%f%n", analyticalCircle.getRadius());
System.out.printf("Çevre:%f%n", analyticalCircle.getCircumference());
System.out.printf("Alan:%f%n", analyticalCircle.getArea());
System.out.printf("{x:%d, y:%d}%n", analyticalCircle.getX(), analyticalCircle.getY());
}
}
AnalyticalCircle sınıfı ve test kodu (3)
/*---------------------------------------------------------------------------------------------------------------------- AnalyticalCircle sınıfı ve test kodu----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.math.geometry.AnalyticalCircle;
classApp {
publicstaticvoidmain(String [] args)
{
AnalyticalCircleanalyticalCircle = newAnalyticalCircle(100, 100);
System.out.printf("Yarıçap:%f%n", analyticalCircle.getRadius());
System.out.printf("Çevre:%f%n", analyticalCircle.getCircumference());
System.out.printf("Alan:%f%n", analyticalCircle.getArea());
System.out.printf("{x:%d, y:%d}%n", analyticalCircle.getX(), analyticalCircle.getY());
}
}
AnalyticalCircle sınıfı ve test kodu (4)
/*---------------------------------------------------------------------------------------------------------------------- AnalyticalCircle sınıfı ve test kodu----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.math.geometry.AnalyticalCircle;
classApp {
publicstaticvoidmain(String [] args)
{
AnalyticalCircleanalyticalCircle = newAnalyticalCircle(-9.78);
System.out.printf("Yarıçap:%f%n", analyticalCircle.getRadius());
System.out.printf("Çevre:%f%n", analyticalCircle.getCircumference());
System.out.printf("Alan:%f%n", analyticalCircle.getArea());
System.out.printf("{x:%d, y:%d}%n", analyticalCircle.getX(), analyticalCircle.getY());
}
}
AnalyticalCircle sınıfı ve test kodu (5)
/*---------------------------------------------------------------------------------------------------------------------- AnalyticalCircle sınıfı ve test kodu Aşağıdaki kodu double ve Point parametreli ctor'u aşağıdaki gibi yazarak test edip problemi inceleyiniz: public AnalyticalCircle(double radius, Point center) //Kötü tasarım { super(radius); m_center = center; }----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.math.geometry.AnalyticalCircle;
importorg.csystem.math.geometry.Point;
classApp {
publicstaticvoidmain(String [] args)
{
Pointp = newPoint(100, 100);
AnalyticalCircleanalyticalCircle = newAnalyticalCircle(-3.4, p);
System.out.printf("Yarıçap:%f%n", analyticalCircle.getRadius());
System.out.printf("Çevre:%f%n", analyticalCircle.getCircumference());
System.out.printf("Alan:%f%n", analyticalCircle.getArea());
System.out.printf("{x:%d, y:%d}%n", analyticalCircle.getX(), analyticalCircle.getY());
p.offset(-20);
System.out.printf("Yarıçap:%f%n", analyticalCircle.getRadius());
System.out.printf("Çevre:%f%n", analyticalCircle.getCircumference());
System.out.printf("Alan:%f%n", analyticalCircle.getArea());
System.out.printf("{x:%d, y:%d}%n", analyticalCircle.getX(), analyticalCircle.getY());
}
}
/*---------------------------------------------------------------------------------------------------------------------- AnalyticalCircle sınıfı ve test kodu: Bir sınıfın içerisinde veri elemanı olarak tuttuğu referansa ilişkin bir metodun aynı isimde ve genel olarak aynı parametrik yapıda yazılan bir versiyonuna "delegate, pass-through, forwarding method" denir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.math.geometry.AnalyticalCircle;
classApp {
publicstaticvoidmain(String [] args)
{
AnalyticalCircleanalyticalCircle = newAnalyticalCircle(-3.4, 100, 90);
System.out.printf("Yarıçap:%f%n", analyticalCircle.getRadius());
System.out.printf("Çevre:%f%n", analyticalCircle.getCircumference());
System.out.printf("Alan:%f%n", analyticalCircle.getArea());
System.out.printf("{x:%d, y:%d}%n", analyticalCircle.getX(), analyticalCircle.getY());
analyticalCircle.offset(-10);
System.out.printf("Yarıçap:%f%n", analyticalCircle.getRadius());
System.out.printf("Çevre:%f%n", analyticalCircle.getCircumference());
System.out.printf("Alan:%f%n", analyticalCircle.getArea());
System.out.printf("{x:%d, y:%d}%n", analyticalCircle.getX(), analyticalCircle.getY());
}
}
AnalyticalCircle sınıfı ve test kodu (8)
/*---------------------------------------------------------------------------------------------------------------------- AnalyticalCircle sınıfı ve test kodu----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.math.geometry.AnalyticalCircle;
classApp {
publicstaticvoidmain(String [] args)
{
AnalyticalCircleanalyticalCircle1 = newAnalyticalCircle(-3.4, 100, 90);
AnalyticalCircleanalyticalCircle2 = newAnalyticalCircle(-3.4, 34, -90);
System.out.printf("Radius distance:%f%n", analyticalCircle1.radiusDistance(analyticalCircle2));
}
}
Aralarında türetme ilişkisi olmayan iki sınıf türünden referans birbirine tür dönüştürme operatörü kullanılarak bile atanamaz
/*---------------------------------------------------------------------------------------------------------------------- Aralarında türetme ilişkisi olmayan iki sınıf türünden referans birbirine tür dönüştürme operatörü kullanılarak bile atanamaz----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
Ax = newA();
By;
y = (B)x;
}
}
classB {
}
classA {
}
yukarıya doğru dönüşüm (upcasting)
/*---------------------------------------------------------------------------------------------------------------------- Türemiş sınıf türünden bir referans taban sınıf türünden bir referansa doğrudan (implicit) atanabilir. Buna yukarıya doğru dönüşüm (upcasting) denir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
Bx = newB();
Ay;
y = x; //upcasting
}
}
classBextendsA {
}
classA {
}
Yukarıya doğru dönüşümde taban sınıf referansına türemiş sınıf referansına ilişkin nesnenin taban sınıf bölümünün adresi atanır.
/*---------------------------------------------------------------------------------------------------------------------- Yukarıya doğru dönüşümde taban sınıf referansına türemiş sınıf referansına ilişkin nesnenin taban sınıf bölümünün adresi atanır.----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
Bx = newB();
Ay;
x.a = 20;
x.b = 30;
y = x;
System.out.printf("y.a=%d%n", y.a);
System.out.printf("x.a=%d%n", x.a);
}
}
classBextendsA {
publicintb;
//...
}
classA {
publicinta;
//...
}
Aşağıdaki örnekte doWork metodu yalnızca A sınıfına bağımlı (dependency) olarak yazılmıştır.
/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte doWork metodu yalnızca A sınıfına bağımlı (dependency) olarak yazılmıştır. Bu metot A sınıfından doğrudan ya da dolaylı olarak türetilen her sınıf için çağrılabilmektedir. Yani doWork metodu derleme zamanında yalnızca A ismini bilmek zorundadır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
Samples = newSample();
Ax = newA();
By = newB();
Cz = newC();
Dt = newD();
x.a = 10;
y.a = 34;
z.a = 12;
t.a = 78;
s.doWork(x);
s.doWork(y);
s.doWork(z);
s.doWork(t);
}
}
classSample {
publicvoiddoWork(Ax)
{
System.out.printf("a=%d%n", x.a);
}
}
classDextendsA {
//..
}
classCextendsB {
//..
}
classBextendsA {
publicintb;
//...
}
classA {
publicinta;
//...
}
/*---------------------------------------------------------------------------------------------------------------------- Bir referansın iki tane türü vardır: statik, dinamik - statik türü (static type): Bir referansın static türü o referansın bildirildiği türdür. "Referansın türü" dendiğinde static tür anlaşılır. Derleme zamanına ilişkin bir bilgidir ve değişmez - dinamik tür (dynamic type): Bir referansın dinamik türü o referansın gösterdiği nesnenin bellekte yaratıldığı türdür (gerçek türüdür). Çalışma zamnına ilişkin bir bilgidir ve değişebilir Anahtar Notlar: Bir referansın dinamik türü String olarak aşağıdaki şekilde elde edilebilir: <referans>.getClass().getName(); Buna göre x bir referans ise x referansının dinamik türü ekrana şu şekilde yazdırılabilir: System.out.println(x.getClass().getName());----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
Ax = newA(); //x'in static türü A, dinamik türü ABy = newB(); //y'in static türü B, dinamik türü BSystem.out.println(x.getClass().getName());
System.out.println(y.getClass().getName());
x = y; //x'in static türü A, dinamik BSystem.out.println(x.getClass().getName());
System.out.println(y.getClass().getName());
}
}
classBextendsA {
}
classA {
}
Aşağıdaki örnekte x'in dinamik türünün değişimi gösterilmiştir
/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte x'in dinamik türünün değişimi gösterilmiştir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importjava.util.Scanner;
classApp {
publicstaticvoidmain(String [] args)
{
Scannerkb = newScanner(System.in);
System.out.print("Bir sayı giriniz:");
intval = Integer.parseInt(kb.nextLine());
Ax;
x = val > 0 ? newA() : newB();
System.out.println(x.getClass().getName());
}
}
classBextendsA {
}
classA {
}
Aşağıdaki örnekte x'in dinamik türünün değişimi gösterilmiştir
/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte x'in dinamik türünün değişimi gösterilmiştir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importjava.util.Scanner;
classApp {
publicstaticvoidmain(String [] args)
{
Scannerkb = newScanner(System.in);
System.out.print("Bir sayı giriniz:");
intval = Integer.parseInt(kb.nextLine());
Ax;
if (val > 0)
x = newC();
elseif (val == 0)
x = newB();
elsex = newA();
System.out.println(x.getClass().getName());
}
}
classCextendsA {
}
classBextendsA {
}
classA {
}
Aşağıdaki örnekte z'nin dinamik türü C olmuştur
/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte z'nin dinamik türü C olmuştur----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
Cx = newC();
By;
Az;
y = x;
System.out.println(y.getClass().getName()); //org.csystem.app.Cz = y;
System.out.println(z.getClass().getName()); //org.csystem.app.C
}
}
classCextendsB {
}
classBextendsA {
}
classA {
}
ir dizi referansının dinamik türü JNI (Java Native Interface) tür ismi olarak yazdırılır.
/*---------------------------------------------------------------------------------------------------------------------- Anahtar Notlar: Bir dizi referansının dinamik türü JNI (Java Native Interface) tür ismi olarak yazdırılır. Bu isim arakoddaki tür ismidir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
int [] a = newint[4];
double [] b = newdouble[5];
System.out.println(a.getClass().getName());
System.out.println(b.getClass().getName());
}
}
Aşağıya doğru dönüşüm(downcasting), haklı ve haksız dönüşüm kavramları
/*---------------------------------------------------------------------------------------------------------------------- Taban sınıf türünden bir referans türemiş sınıf türünden bir referansa doğrudan atanamaz. Bu işlem tür dönüştürme operatörü ile (explicit) atanabilir. Burada tür dönüştürme derlemeden geçmek içindir. Çalışma zamanı sırasında kaynak referansın dinamik türünün tür dönüştürme operatörüne yazılan türü kapsayıp kapsamadığına bakılır. Kapsıyorsa haklı dönüşümdür. Kapsamıyorsa haksız dönüşümdür ve exception oluşur----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importjava.util.Scanner;
classApp {
publicstaticvoidmain(String [] args)
{
Scannerkb = newScanner(System.in);
System.out.print("Bir sayı giriniz:");
intval = Integer.parseInt(kb.nextLine());
Ax;
By;
x = val > 0 ? newA() : newB();
y = (B)x; //downcastingSystem.out.println("Tekrar yapıyor musunuz?");
y.a = 10;
y.b = 30;
}
}
classBextendsA {
publicintb;
}
classA {
publicinta;
}
Object sınıfı her sınıfın doğrudan ya da dolaylı olarak taban sınıfı olduğundan her türden referans Object referansına atanabilir.
/*---------------------------------------------------------------------------------------------------------------------- Object sınıfı her sınıfın doğrudan ya da dolaylı olarak taban sınıfı olduğundan her türden referans Object referansına atanabilir. Aşağıdaki örnekte çeşitli türler için Object kullanarak upcasting yapılmış ve downcasting ile dinamik türlere ilişkin referanslara atama yapılmıştır. Şüphesiz downcasting işleminde dinamik tür bilinmeden yapılması durumu exception fırlatılmasına yol açabilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.util.datetime.Date;
importjava.util.Random;
classApp {
publicstaticvoidmain(String [] args)
{
Objectos = "ankara";
Objector = newRandom();
Objectoia = newint[10];
Objectod = newDate();
System.out.println(os.getClass().getName());
System.out.println(or.getClass().getName());
System.out.println(oia.getClass().getName());
Strings = (String)os;
Randomr = (Random)or;
int [] a = (int[])oia;
Datedate = (Date)od;
System.out.println(s.toUpperCase());
System.out.println(r.nextInt());
System.out.println(a[0]);
System.out.println(date.toLongDateStringTR());
}
}
Aşağdaki örnekte Object dizisinin referanslarının dinamik türüne göre downcasting yapılmıştır.
/*---------------------------------------------------------------------------------------------------------------------- Aşağdaki örnekte Object dizisinin referanslarının dinamik türüne göre downcasting yapılmıştır. Ancak dinamik tür bilgisi (RTTI (Run Time Type Information) tür isminden elde edilmiştir. Programcının tür ismini yanlış yazma olasılığı vardır. Ayrıca yazı karşılaştırma işlemleri göreceli yavaştır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.app.samples.randomgenerator.RandomObjectArrayGeneratorApp;
classApp {
publicstaticvoidmain(String [] args)
{
RandomObjectArrayGeneratorApp.run();
}
}
packageorg.csystem.app.samples.randomgenerator;
importorg.csystem.util.ArrayUtil;
importorg.csystem.util.IntValue;
importorg.csystem.util.datetime.Date;
importorg.csystem.util.datetime.Time;
publicclassRandomObjectArrayGeneratorApp {
privateRandomObjectArrayGeneratorApp()
{}
publicstaticvoidrun()
{
RandomObjectArrayGeneratorrandomObjectArrayGenerator = newRandomObjectArrayGenerator(5);
randomObjectArrayGenerator.run();
for (Objectobject : randomObjectArrayGenerator.getObjects()) {
StringtypeName = object.getClass().getName();
System.out.printf("Dinamik tür ismi:%s%n", typeName);
if (typeName.equals("java.lang.String")) {
Strings = (String)object;
System.out.printf("Yazı:%s%n", s);
System.out.printf("Yazı:%s%n", s.toUpperCase());
}
elseif (typeName.equals("org.csystem.util.IntValue")) {
IntValueintValue = (IntValue)object;
intval = intValue.getVal();
System.out.printf("%d * %d = %d%n", val, val, val * val);
}
elseif (typeName.equals("org.csystem.util.datetime.Date")) {
Datedate = (Date)object;
System.out.println(date.toLongDateStringTR());
}
elseif (typeName.equals("org.csystem.util.datetime.Time")) {
Timetime = (Time)object;
System.out.println(time.toLongTimeString());
}
elseif (typeName.equals("[I")) {
int [] a = (int[])object;
ArrayUtil.display(3, a);
}
}
}
}
Aşağdaki örnekte programcının tür ismini yanlış yazma olasılığı neredeyse kalmasa da hala yazı karşılaştırması yapılmaktadır
/*---------------------------------------------------------------------------------------------------------------------- Aşağdaki örnekte programcının tür ismini yanlış yazma olasılığı neredeyse kalmasa da hala yazı karşılaştırması yapılmaktadır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.app.samples.randomgenerator.RandomObjectArrayGeneratorApp;
classApp {
publicstaticvoidmain(String [] args)
{
RandomObjectArrayGeneratorApp.run();
}
}
packageorg.csystem.app.samples.randomgenerator;
importorg.csystem.util.ArrayUtil;
importorg.csystem.util.IntValue;
importorg.csystem.util.datetime.Date;
importorg.csystem.util.datetime.Time;
publicclassRandomObjectArrayGeneratorApp {
privateRandomObjectArrayGeneratorApp()
{}
publicstaticvoidrun()
{
RandomObjectArrayGeneratorrandomObjectArrayGenerator = newRandomObjectArrayGenerator(5);
randomObjectArrayGenerator.run();
for (Objectobject : randomObjectArrayGenerator.getObjects()) {
StringtypeName = object.getClass().getName();
System.out.printf("Dinamik tür ismi:%s%n", typeName);
if (typeName.equals(TypeInfo.STRING)) {
Strings = (String)object;
System.out.printf("Yazı:%s%n", s);
System.out.printf("Yazı:%s%n", s.toUpperCase());
}
elseif (typeName.equals(TypeInfo.INT_VALUE)) {
IntValueintValue = (IntValue)object;
intval = intValue.getVal();
System.out.printf("%d * %d = %d%n", val, val, val * val);
}
elseif (typeName.equals(TypeInfo.DATE)) {
Datedate = (Date)object;
System.out.println(date.toLongDateStringTR());
}
elseif (typeName.equals(TypeInfo.TIME)) {
Timetime = (Time)object;
System.out.println(time.toLongTimeString());
}
elseif (typeName.equals(TypeInfo.INT_ARRAY)) {
int [] a = (int[])object;
ArrayUtil.display(3, a);
}
}
}
}
packageorg.csystem.app.samples.randomgenerator;
publicclassTypeInfo {
privateTypeInfo()
{}
publicstaticfinalStringSTRING = "java.lang.String";
publicstaticfinalStringINT_VALUE = "org.csystem.util.IntValue";
publicstaticfinalStringDATE = "org.csystem.util.datetime.Date";
publicstaticfinalStringTIME = "org.csystem.util.datetime.Time";
publicstaticfinalStringINT_ARRAY = "[I";
}
instanceof operatörü iki operandlı (binary), araek (infix) bir operatördür.
/*---------------------------------------------------------------------------------------------------------------------- instanceof operatörü iki operandlı (binary), araek (infix) bir operatördür. instanceof operatörünün birinci operandı bir referans olmalıdır. İkinci operandı ise bir referans tür ismi olmalıdır. Bu operatörün ürettiği değer boolean türdendir. Operatör birinci operandına ilişkin referansın dinamik türü ikinci operandına ilişkin türü kapsıyorsa true, kapsamıyorsa false değerini üretir. Özellikle downcasting yapılacağı durumda tür kontrolü için kullanılır----------------------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte instanceof operatörü kullanılarak hem okunabilirlik artırılmış, hem yazı içerisinde hata yapma olasılığı ortadan kaldırılmış hem de karşılaştırma işlemi daha etkin hale getirilmiştir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importorg.csystem.app.samples.randomgenerator.RandomObjectArrayGeneratorApp;
classApp {
publicstaticvoidmain(String [] args)
{
RandomObjectArrayGeneratorApp.run();
}
}
packageorg.csystem.app.samples.randomgenerator;
importorg.csystem.util.ArrayUtil;
importorg.csystem.util.IntValue;
importorg.csystem.util.datetime.Date;
importorg.csystem.util.datetime.Time;
publicclassRandomObjectArrayGeneratorApp {
privateRandomObjectArrayGeneratorApp()
{}
publicstaticvoidrun()
{
RandomObjectArrayGeneratorrandomObjectArrayGenerator = newRandomObjectArrayGenerator(5);
randomObjectArrayGenerator.run();
for (Objectobject : randomObjectArrayGenerator.getObjects()) {
System.out.printf("Dinamik tür ismi:%s%n", object.getClass().getName());
if (objectinstanceofString) {
Strings = (String)object;
System.out.printf("Yazı:%s%n", s);
System.out.printf("Yazı:%s%n", s.toUpperCase());
}
elseif (objectinstanceofIntValue) {
IntValueintValue = (IntValue)object;
intval = intValue.getVal();
System.out.printf("%d * %d = %d%n", val, val, val * val);
}
elseif (objectinstanceofDate) {
Datedate = (Date)object;
System.out.println(date.toLongDateStringTR());
}
elseif (objectinstanceofTime) {
Timetime = (Time)object;
System.out.println(time.toLongTimeString());
}
elseif (objectinstanceofint []) {
int [] a = (int[])object;
ArrayUtil.display(3, a);
}
}
}
}
packageorg.csystem.app.samples.randomgenerator;
importorg.csystem.util.ArrayUtil;
importorg.csystem.util.IntValue;
importorg.csystem.util.StringUtil;
importorg.csystem.util.datetime.Date;
importorg.csystem.util.datetime.Time;
importjava.util.Random;
publicclassRandomObjectArrayGenerator {
privatefinalRandomm_random;
privatefinalObject [] m_objects;
privateObjectgetRandomObject()
{
intval = m_random.nextInt(5);
Objectobject;
switch (val) {
case0:
object = StringUtil.getRandomTextTR(m_random.nextInt(15) + 1);
break;
case1:
object = IntValue.of(m_random.nextInt(255) - 128);
break;
case2:
object = Date.randomDate(m_random);
break;
case3:
object = Time.randomTime(m_random);
break;
default:
object = ArrayUtil.getRandomArray(m_random, 10, 0, 256);
}
returnobject;
}
publicRandomObjectArrayGenerator(intn)
{
m_random = newRandom();
m_objects = newObject[n];
}
publicObject [] getObjects()
{
returnm_objects;
}
publicvoidrun()
{
for (inti = 0; i < m_objects.length; ++i)
m_objects[i] = getRandomObject();
}
}
instanceof operatörü ikinci operandına ilişkin türü kapsayıp kapsamadığına bakar
/*---------------------------------------------------------------------------------------------------------------------- instanceof operatörü ikinci operandına ilişkin türü kapsayıp kapsamadığına bakar----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importjava.util.Scanner;
classApp {
publicstaticvoidmain(String [] args)
{
Scannerkb = newScanner(System.in);
System.out.print("Bir sayı giriniz:");
intval = Integer.parseInt(kb.nextLine());
Ax = Sample.getAByValue(val);
if (xinstanceofB)
((B)x).foo();
elseSystem.out.println("foo metodu çağrılamaz");
}
}
classSample {
//...publicstaticAgetAByValue(intval)
{
Ax;
if (val > 0)
x = newC();
elseif (val == 0)
x = newB();
elsex = newA();
returnx;
}
}
classCextendsB {
}
classBextendsA {
publicvoidfoo()
{
System.out.println("B.foo");
}
}
classA {
}
Sarmalayan Sınıflar (wrapper classes)
/*---------------------------------------------------------------------------------------------------------------------- Sarmalayan Sınıflar (wrapper classes): Java'da her temel (built-in) türe karşılık bir sınıf getirilmiştir. Bunun nedeni bu sınıfları tanıdıkça anlaşılacaktır. Bu sınıflar sarmalamanın dışında ilgili türe ilişkin yardımcı elemanları da barındırırlar. Örneğin Integer sınıfının parseInt metodu bir yazıdan (String) int türden bir değer elde etmek için kullanılır. Temel türlere ilişkin sarmalayan sınıflar aşağıdaki gibidir: Temel Tür Sarmalayan Sınıf İsmi ---------------------------------------------- short Short int Integer long Long byte Byte double Double float Float char Character boolean Boolean Bu türlerden tamsayı ve gerçek sayı türlerine ilişkin sınıflara nümerik sarmalayan sınıf denebilir. Bu sınıflara ilişkin temel özellikler şunlardır: - Tamsayı ve gerçek sayı türlerine ilişkin sınıflar (Short, Integer, Long, Byte, Float, Double) Number isimli bir sınıftan türetilmiştir. Number sınıfı java.lang paketi içerisindedir. Number sınıfının metotları ileride ele alınacaktır. - Sarmalayan sınıflar immutable'dır. - Bu sınıflar temel türden değerin heap de tutulması için kullanılır. Bu kavrama kutulama (boxing) denir. Bu konu ileride ele alınacaktır. - Java 9 ile birlikte sarmalayan sınıfların ctor'ları depracated olmuştur. Java 5 den itibaren zaten kullanılmayan bu ctor'lar artık hiç kullanılmamalıdır. Bunun nedeni ileride ele alınacaktır----------------------------------------------------------------------------------------------------------------------*/
sarmalayan sınıfların MIN_VALUE ve MAX_VALUE isimli final static veri elemanları
/*---------------------------------------------------------------------------------------------------------------------- Tamsayı, gerçek sayı ve char türlerine ilişkin sarmalayan sınıfların MIN_VALUE ve MAX_VALUE isimli final static veri elemanları vardır. Bu elemanlar ilişkin oldukları temel türdendir. Double ve Float sınıflarının MIN_VALUE değerlerinin pozitif olduğuna dikkat ediniz. Bu durum IEEE 754 formatına ilişkindir. double ve float türleri için sınırlar aşağıdaki gibi -+ biçimindedir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
System.out.printf("short:[%d, %d]%n", Short.MIN_VALUE, Short.MAX_VALUE);
System.out.printf("int:[%d, %d]%n", Integer.MIN_VALUE, Integer.MAX_VALUE);
System.out.printf("long:[%d, %d]%n", Long.MIN_VALUE, Long.MAX_VALUE);
System.out.printf("byte:[%d, %d]%n", Byte.MIN_VALUE, Byte.MAX_VALUE);
System.out.printf("char:[%d, %d]%n", (int)Character.MIN_VALUE, (int)Character.MAX_VALUE);
System.out.printf("double:[-+%.325f, -+%f]%n", Double.MIN_VALUE, Double.MAX_VALUE);
System.out.printf("float:[-+%.325f, -+%f]%n", Float.MIN_VALUE, Float.MAX_VALUE);
}
}
sarmalayan sınıfların SIZE isimli final ve static veri elemanları
/*---------------------------------------------------------------------------------------------------------------------- Boolean sınıfı haricindeki tüm sarmalayan sınıfların SIZE isimli final ve static veri elemanları ilgili temel türün bit cinsinden uzunluk bilgisini tutar. Bu eleman okunabilirliği artırmak için ilgili türün uzunluğu gerektiğinde kullanılabilir. Java' da temel türlerin uzunluğu sistemden sisteme değişmeyeceğinden doğrudan sayısal değerleri de kullanılabilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
System.out.printf("sizeof(short)=%d bits%n", Short.SIZE);
System.out.printf("sizeof(int)=%d bits%n", Integer.SIZE);
System.out.printf("sizeof(long)=%d bits%n", Long.SIZE);
System.out.printf("sizeof(byte)=%d bits%n", Byte.SIZE);
System.out.printf("sizeof(char)=%d bits%n", Character.SIZE);
System.out.printf("sizeof(double)=%d bits%n", Double.SIZE);
System.out.printf("sizeof(float)=%d bits%n", Float.SIZE);
}
}
sarmalayan sınıfların BYTES isimli final ve static veri elemanları
/*---------------------------------------------------------------------------------------------------------------------- Boolean sınıfı haricindeki tüm sarmalayan sınıfların BYTES isimli final ve static veri elemanları ilgili temel türün byte cinsinden uzunluk bilgisini tutar. Bu eleman okunabilirliği artırmak için ilgili türün uzunluğu gerektiğinde kullanılabilir. Java' da temel türlerin uzunluğu sistemden sisteme değişmeyeceğinden doğrudan sayısal değerleri de kullanılabilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
System.out.printf("sizeof(short)=%d Bytes%n", Short.BYTES);
System.out.printf("sizeof(int)=%d Bytes%n", Integer.BYTES);
System.out.printf("sizeof(long)=%d Bytes%n", Long.BYTES);
System.out.printf("sizeof(byte)=%d Bytes%n", Byte.BYTES);
System.out.printf("sizeof(char)=%d Bytes%n", Character.BYTES);
System.out.printf("sizeof(double)=%d Bytes%n", Double.BYTES);
System.out.printf("sizeof(float)=%d Bytes%n", Float.BYTES);
}
}
nümeric türlerin parseXXX metotları ile bir yazıdan ilgili türe ilişkin değer elde edilebilir.
/*---------------------------------------------------------------------------------------------------------------------- Bilindiği gibi nümeric türlerin parseXXX metotları ile bir yazıdan ilgili türe ilişkin değer elde edilebilir. Character sınıfı dışında tüm sarmalayan sınıfların parseXXX metotları vardır. Boolean sınıfı dışındaki tüm sarmalayan sınıfların pareXXX metotları yazıyı ilgili türe çeviremezse exception fırlatır. Boolean metodunun parseBoolean metodu çeviremedği bir yazı için false değerini döndürür. Yani kısaca parseBoolean metodu büyük-küçüğk harf duyarsız bir biçimde yazının true olması durumunda true değerini, diğer tüm yazılar için false değerini döndürür----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importjava.util.Scanner;
classApp {
publicstaticvoidmain(String [] args)
{
Scannerkb = newScanner(System.in);
System.out.print("true veya false giriniz:");
booleanflag = Boolean.parseBoolean(kb.nextLine());
System.out.printf("flag=%b%n", flag);
}
}
/*---------------------------------------------------------------------------------------------------------------------- Integer sınıfının radix (sayı sistemi) parametreli parseInt metodu----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
importjava.util.Scanner;
classApp {
publicstaticvoidmain(String [] args)
{
Scannerkb = newScanner(System.in);
System.out.print("Sayı sistemini giriniz:");
intradix = Integer.parseInt(kb.nextLine());
System.out.printf("%d sayı sistemine uygun bir sayı giriniz:", radix);
intval = Integer.parseInt(kb.nextLine(), radix);
System.out.printf("val=%d%n", val);
}
}
Aşağıdaki örnekte substring ve parseInt metotları kullanılarak yazı içerisindeki not bilgisi elde edilmiştir.
/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte substring ve parseInt metotları kullanılarak yazı içerisindeki not bilgisi elde edilmiştir. Format geçerlilik kontrolü yapılmamıştır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
String [] notesInfo = {
"Oğuz Karan\0:78:\0Matematik\0vize",
"Ali Serçe\0:100:\0Fizik\0final",
"Güray Sönmez\0:79:\0Kimya\0vize"
};
intsum = 0;
for (StringnoteInfo : notesInfo) {
intfirstNullCharacterIndex = noteInfo.indexOf('\0');
//...intsecondNullCharacterIndex = noteInfo.indexOf('\0', firstNullCharacterIndex + 2);
//...StringstrNote = noteInfo.substring(firstNullCharacterIndex + 2, secondNullCharacterIndex - 1);
intnote = Integer.parseInt(strNote);
System.out.printf("%d ", note);
sum += note;
}
System.out.printf("%nOrtalama:%f%n", (double)sum / notesInfo.length);
}
}
Yuklarıdaki örnekte indeksler bulundak sonra sayıya çevirme işlemi Java 9 ile birlikte eklenen parseInt metodu ile çok daha kolay bir biçimde yapılabilir.
/*---------------------------------------------------------------------------------------------------------------------- Yuklarıdaki örnekte indeksler bulundak sonra sayıya çevirme işlemi Java 9 ile birlikte eklenen parseInt metodu ile çok daha kolay bir biçimde yapılabilir. Format geçerlilik kontrolü yapılmamıştır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app;
classApp {
publicstaticvoidmain(String [] args)
{
String [] notesInfo = {
"Oğuz Karan\0:78:\0Matematik\0vize",
"Ali Serçe\0:100:\0Fizik\0final",
"Güray Sönmez\0:79:\0Kimya\0vize"
};
intsum = 0;
for (StringnoteInfo : notesInfo) {
intfirstNullCharacterIndex = noteInfo.indexOf('\0');
//...intsecondNullCharacterIndex = noteInfo.indexOf('\0', firstNullCharacterIndex + 2);
//...intnote = Integer.parseInt(noteInfo, firstNullCharacterIndex + 2, secondNullCharacterIndex - 1, 10); //Since Java 9System.out.printf("%d ", note);
sum += note;
}
System.out.printf("%nOrtalama:%f%n", (double)sum / notesInfo.length);
}
}
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/