Skip to content

Latest commit

 

History

History
2075 lines (1678 loc) · 58.6 KB

File metadata and controls

2075 lines (1678 loc) · 58.6 KB

Sınıf Çalışması: Doğum günü kutlaması

/*---------------------------------------------------------------------------------------------------------------------- Sınıf Çalışması: Klavyeden alınan gün, ay ve yıl bilgilerine göre kişinin doğum günü geçmişse "geçmiş doğum gününüz kutlu olsun", o an doğum günü ise "doğum gününüz kutlu olsun", doğum henüz gelmemişse "doğum gününüzü şimdiden kutlarız" mesajlarından birini ekrana basan programı Calendar sınıfını kullanarak yazınız----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.util.Calendar; importjava.util.GregorianCalendar; classApp { publicstaticvoidmain(String[] args) { BirthDateApp.run(); } } finalclassBirthDateApp { privatestaticBirthDateInfogetBirtDateInfo() { Console.writeLine("Doğum tarihi bilgilerinizi giriniz:"); varday = Console.readInt("Gün?", "Hatalı giriş yaptınız:"); if (day <= 0) returnnull; varmon = Console.readInt("Ay?", "Hatalı giriş yaptınız:"); varyear = Console.readInt("Yıl?", "Hatalı giriş yaptınız:"); returnnewBirthDateInfo(day, mon, year); } privateBirthDateApp() {} publicstaticvoidrun() { while (true) { varbirthDateInfo = getBirtDateInfo(); if (birthDateInfo == null) break; Stringmessage = ""; switch (birthDateInfo.getDateStatus()) { caseAFTER: message = "Doğum günüzünüzü şimdiden kutlarız"; break; caseBEFORE: message = "Geçmiş doğum gününüz kutlu kutlarız"; break; default: message = "Doğum gününüz kutlu olsun"; } Console.writeLine("%s. Yaşınız:%f", message, birthDateInfo.getAge()); } Console.writeLine("Tekrar yapıyor musunuz?"); } } enumDateStatus {BEFORE, AFTER, SAME} classBirthDateInfo { privatestaticfinaldoubleSCALE_FOR_DAY = 1000. * 60 * 60 * 24 * 365; privateCalendarm_birthDate; privatestaticCalendartooDate(Calendarcalendar) { returnnewGregorianCalendar(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); } publicBirthDateInfo() { m_birthDate = Calendar.getInstance(); } publicBirthDateInfo(intday, intmon, intyear) { setBirthDate(day, mon, year); } publicvoidsetBirthDate(intday, intmon, intyear) { m_birthDate = newGregorianCalendar(year, mon - 1, day); } publicdoublegetAge() { vartoday = tooDate(newGregorianCalendar()); return (today.getTimeInMillis() - m_birthDate.getTimeInMillis()) / SCALE_FOR_DAY; } publicDateStatusgetDateStatus() { vartoday = tooDate(newGregorianCalendar()); varbirthDay = newGregorianCalendar(today.get(Calendar.YEAR), m_birthDate.get(Calendar.MONTH), m_birthDate.get(Calendar.DAY_OF_MONTH)); DateStatusdateStatus = DateStatus.SAME; if (birthDay.after(today)) dateStatus = DateStatus.AFTER; elseif (birthDay.before(today)) dateStatus = DateStatus.BEFORE; returndateStatus; } }
/*---------------------------------------------------------------------------------------------------------------------- Sınıf Çalışması: Klavyeden alınan gün, ay ve yıl bilgilerine göre kişinin doğum günü geçmişse "geçmiş doğum gününüz kutlu olsun", o an doğum günü ise "doğum gününüz kutlu olsun", doğum henüz gelmemişse "doğum gününüzü şimdiden kutlarız" mesajlarından birini ekrana basan programı Calendar sınıfını kullanarak yazınız----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importorg.csystem.util.datetime.DateTime; classApp { publicstaticvoidmain(String[] args) { BirthDateApp.run(); } } finalclassBirthDateApp { privatestaticBirthDateInfogetBirtDateInfo() { Console.writeLine("Doğum tarihi bilgilerinizi giriniz:"); varday = Console.readInt("Gün?", "Hatalı giriş yaptınız:"); if (day <= 0) returnnull; varmon = Console.readInt("Ay?", "Hatalı giriş yaptınız:"); varyear = Console.readInt("Yıl?", "Hatalı giriş yaptınız:"); returnnewBirthDateInfo(day, mon, year); } privateBirthDateApp() {} publicstaticvoidrun() { while (true) { varbirthDateInfo = getBirtDateInfo(); if (birthDateInfo == null) break; Stringmessage = ""; switch (birthDateInfo.getDateStatus()) { caseAFTER: message = "Doğum günüzünüzü şimdiden kutlarız"; break; caseBEFORE: message = "Geçmiş doğum gününüz kutlu kutlarız"; break; default: message = "Doğum gününüz kutlu olsun"; } Console.writeLine("%s. Yaşınız:%f", message, birthDateInfo.getAge()); } Console.writeLine("Tekrar yapıyor musunuz?"); } } enumDateStatus {BEFORE, AFTER, SAME} classBirthDateInfo { privatestaticfinaldoubleSCALE_FOR_DAY = 1000. * 60 * 60 * 24 * 365; privateDateTimem_birthDate; publicBirthDateInfo() { m_birthDate = DateTime.today(); } publicBirthDateInfo(intday, intmon, intyear) { setBirthDate(day, mon, year); } publicvoidsetBirthDate(intday, intmon, intyear) { m_birthDate = DateTime.of(day, mon, year); } publicdoublegetAge() { return (DateTime.today().getTimeInMillis() - m_birthDate.getTimeInMillis()) / SCALE_FOR_DAY; } publicDateStatusgetDateStatus() { vartoday = DateTime.today(); varbirthDay = m_birthDate.withYear(today.getYear()); DateStatusdateStatus = DateStatus.SAME; if (birthDay.isAfter(today)) dateStatus = DateStatus.AFTER; elseif (birthDay.isBefore(today)) dateStatus = DateStatus.BEFORE; returndateStatus; } } packageorg.csystem.util.datetime; importjava.io.Serializable; importjava.util.Calendar; importjava.util.GregorianCalendar; importstaticjava.util.Calendar.*; publicfinalclassDateTimeimplementsSerializable, Comparable<DateTime> { privatestaticfinallongserialVersionUID = 1L; privatestaticfinalint [] DAYS_OF_MONTHS = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; privatefinalCalendarm_calendar; privatestaticbooleanisValidDate(intday, intmon, intyear) { if (day < 1 || day > 31 || mon < 1 || mon > 12) returnfalse; intdays = mon == 2 && isLeapYear(year) ? 29 : DAYS_OF_MONTHS[mon]; returnday <= days; } privatestaticbooleanisLeapYear(intyear) { returnyear % 4 == 0 && year % 100 != 0 || year % 400 == 0; } privatestaticbooleanisValidForTime(inthour, intminute, intsecond, intmillisecond) { returnisValidForHour(hour) && isValidForMinute(minute) && isValidForSecond(second) && isValidForMillisecond(millisecond); } privatestaticbooleanisValidForHour(inthour) { returnisValidForBounds(hour, 23); } privatestaticbooleanisValidForMinute(intminute) { returnisValidForBounds(minute, 59); } privatestaticbooleanisValidForSecond(intsecond) { returnisValidForBounds(second, 59); } privatestaticbooleanisValidForMillisecond(intsecond) { returnisValidForBounds(second, 999); } privatestaticbooleanisValidForBounds(intval, intmax) { return0 <= val && val <= max; } privatestaticvoidcontrolForDate(intday, intmon, intyear, Stringmsg) { if (!isValidDate(day, mon, year)) doWorkForException(msg); } privatestaticvoidcontrolForTime(inthour, intminute, intsecond, intmillisecond, Stringmsg) { if (!isValidForTime(hour, minute, second, millisecond)) doWorkForException(msg); } publicstaticvoidcontrolForHour(inthour) { if (!isValidForHour(hour)) doWorkForException("Invalid Hour"); } publicstaticvoidcontrolForMinute(intminute) { if (!isValidForMinute(minute)) doWorkForException("Invalid Minute"); } publicstaticvoidcontrolForSecond(intsecond) { if (!isValidForSecond(second)) doWorkForException("Invalid Second"); } publicstaticvoidcontrolForMillisecond(intmillisecond) { if (!isValidForMillisecond(millisecond)) doWorkForException("Invalid Millisecond"); } privatestaticvoidcontrol(intday, intmon, intyear, inthour, intminute, intsecond, intmillisecond, Stringmsg) { controlForDate(day, mon, year, msg); controlForTime(hour, minute, second, millisecond, msg); } privatestaticvoiddoWorkForException(Stringmsg) { thrownewDateTimeException(msg); } privateDateTime(Calendarcalendar) { m_calendar = calendar; } privateDateTime() { m_calendar = Calendar.getInstance(); } privateDateTime(intday, intmon, intyear, inthour, intminute, intsecond, intmilliseconds) { control(day, mon, year, hour, minute, second, milliseconds, "Invalid org.csystem.util.datetime.DateTime"); m_calendar = newGregorianCalendar(year, mon - 1, day, hour, minute, second); m_calendar.set(MILLISECOND, milliseconds); } privateDateTimeplus(intfield, intamount) { Calendarcalendar = (Calendar)m_calendar.clone(); calendar.add(field, amount); returnnewDateTime(calendar); } privateDateTimewith(intfield, intvalue) { Calendarcalendar = (Calendar)m_calendar.clone(); calendar.set(field, value); returnnewDateTime(calendar); } publicstaticDateTimeof(longmilliseconds) { DateTimedateTime = newDateTime(); dateTime.m_calendar.setTimeInMillis(milliseconds); returndateTime; } publicstaticDateTimeof(intday, intmon, intyear) { returnof(day, mon, year, 0, 0); } publicstaticDateTimeof(intday, Monthmon, intyear) { returnof(day, mon.ordinal() + 1, year); } publicstaticDateTimeof(intday, Monthmon, intyear, inthour, intminute) { returnof(day, mon.ordinal() + 1, year, hour, minute); } publicstaticDateTimeof(intday, intmon, intyear, inthour, intminute) { returnof(day, mon, year, hour, minute, 0); } publicstaticDateTimeof(intday, Monthmon, intyear, inthour, intminute, intsecond) { returnof(day, mon.ordinal() + 1, year, hour, minute, second); } publicstaticDateTimeof(intday, intmon, intyear, inthour, intminute, intsecond) { returnof(day, mon, year, hour, minute, second, 0); } publicstaticDateTimeof(intday, Monthmon, intyear, inthour, intminute, intsecond, intmillisecond) { returnof(day, mon.ordinal() + 1, year, hour, minute, second, millisecond); } publicstaticDateTimeof(intday, intmon, intyear, inthour, intminute, intsecond, intmillisecond) { returnnewDateTime(day, mon, year, hour, minute, second, millisecond); } publicstaticDateTimenow() {returnnewDateTime();} publicstaticDateTimetoday() { DateTimenow = now(); now.m_calendar.set(HOUR_OF_DAY, 0); now.m_calendar.set(MINUTE, 0); now.m_calendar.set(SECOND, 0); now.m_calendar.set(MILLISECOND, 0); returnnow; } publicintgetDay() {returnm_calendar.get(DAY_OF_MONTH);} publicintgetMonthValue() {returnm_calendar.get(MONTH) + 1;} publicMonthgetMonth() {returnMonth.values()[getMonthValue() - 1];} publicintgetYear() {returnm_calendar.get(YEAR);} publicDayOfWeekgetDayOfWeek() {returnDayOfWeek.values()[m_calendar.get(DAY_OF_WEEK) - 1];} publicintgetDayOfYear() {returnm_calendar.get(DAY_OF_YEAR);} publicintgetHour() {returnm_calendar.get(HOUR_OF_DAY);} publicintgetMinute() {returnm_calendar.get(MINUTE);} publicintgetSecond() {returnm_calendar.get(SECOND);} publicintgetMillisecond() {returnm_calendar.get(MILLISECOND);} publiclonggetTimeInMillis() { returnm_calendar.getTimeInMillis(); } publicintgetEndOfMonth() {returnm_calendar.getActualMaximum(DAY_OF_MONTH);} publicbooleanisAfter(DateTimeother) {returncompareTo(other) > 0;} publicbooleanisBefore(DateTimeother) {returncompareTo(other) < 0;} publicbooleanisEqual(DateTimeother) {returnequals(other);} publicbooleanisLeapYear() { returnisLeapYear(getYear()); } publicbooleanisWeekday() {return !isWeekend();} publicbooleanisWeekend() { DayOfWeekdow = getDayOfWeek(); returndow == DayOfWeek.SAT || dow == DayOfWeek.SUN; } publicDateTimeplusDays(intdays) { returnplus(DAY_OF_MONTH, days); } publicDateTimeplusMonths(intmonths) { returnplus(MONTH, months); } publicDateTimeplusYears(intyears) { returnplus(YEAR, years); } publicDateTimeplusHours(inthours) { returnplus(HOUR_OF_DAY, hours); } publicDateTimeplusMinutes(intminutes) { returnplus(MINUTE, minutes); } publicDateTimeplusSeconds(intseconds) { returnplus(SECOND, seconds); } publicDateTimeplusMilliseconds(intmilliseconds) { returnplus(MILLISECOND, milliseconds); } publicDateTimeminusDays(intdays) { returnplusDays(-days); } publicDateTimeminusMonths(intmonths) { returnplusMonths(-months); } publicDateTimeminusYears(intyears) { returnplusYears(-years); } publicDateTimeminusHours(inthours) { returnplusHours(-hours); } publicDateTimeminusMinutes(intminutes) { returnplusMinutes(-minutes); } publicDateTimeminusSeconds(intseconds) { returnplusSeconds(-seconds); } publicDateTimeminusMilliseconds(intmilliseconds) { returnplusMilliseconds(-milliseconds); } publicDateTimewithDay(intday) { controlForDate(day, getMonthValue(), getYear(), "Invalid Day"); returnwith(DAY_OF_MONTH, day); } publicDateTimewithMonthValue(intmonth) { controlForDate(getDay(), month, getYear(), "Invalid org.csystem.util.datetime.Month"); returnwith(MONTH, month - 1); } publicDateTimewithMonth(Monthmonth) { returnwithMonthValue(month.ordinal() + 1); } publicDateTimewithYear(intyear) { controlForDate(getDay(), getMonthValue(), year, "Invalid Year"); returnwith(YEAR, year); } publicDateTimewithHour(inthour) { controlForHour(hour); returnwith(HOUR_OF_DAY, hour); } publicDateTimewithMinute(intminute) { controlForMinute(minute); returnwith(MINUTE, minute); } publicDateTimewithSecond(intsecond) { controlForSecond(second); returnwith(SECOND, second); } publicDateTimewithMillisecond(intmillisecond) { controlForMillisecond(millisecond); returnwith(MILLISECOND, millisecond); } @OverridepublicintcompareTo(DateTimeother) { returnm_calendar.compareTo(other.m_calendar); } @Overridepublicbooleanequals(Objectobj) { if (!(objinstanceofDateTime)) returnfalse; returnm_calendar.equals(obj); } @OverridepublicinthashCode() { returnm_calendar.hashCode(); } @OverridepublicStringtoString() { returntoString('/'); } publicStringtoString(chardelim) { returnString.format("%s %s", toDateString(delim), toTimeString()); } publicStringtoDateString() { returntoDateString('/'); } publicStringtoDateString(chardelim) { returnString.format("%02d%c%02d%c%04d", getDay(), delim, getMonthValue(), delim, getYear()); } publicStringtoLongTimeString() { returnString.format("%s.%d", toTimeString(), getMillisecond()); } publicStringtoTimeString() { returnString.format("%02d:%02d:%02d", getHour(), getMinute(), getSecond()); } } packageorg.csystem.util.datetime; publicclassDateTimeExceptionextendsRuntimeException { publicDateTimeException() {} publicDateTimeException(Stringmsg) { super(msg); } } packageorg.csystem.util.datetime; publicenumDayOfWeek { SUN, MON, TUE, WED, THU, FRI, SAT } packageorg.csystem.util.datetime; publicenumMonth { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC }

LocalDate sınıfının of metotları

/*---------------------------------------------------------------------------------------------------------------------- LocalDate sınıfının of metotları----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; classApp { publicstaticvoidmain(String[] args) { vardate = LocalDate.of(2020, 9, 12); Console.writeLine("%02d/%02d/%04d", date.getDayOfMonth(), date.getMonthValue(), date.getYear()); Console.writeLine("%02d %s %04d %s", date.getDayOfMonth(), date.getMonth(), date.getYear(), date.getDayOfWeek()); } }

LocalDate sınıfının Month parametreli ctor elemanı

/*---------------------------------------------------------------------------------------------------------------------- LocalDate sınıfının Month parametreli ctor elemanı----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; importjava.time.Month; classApp { publicstaticvoidmain(String[] args) { vardate = LocalDate.of(2020, Month.SEPTEMBER, 12); Console.writeLine("%02d/%02d/%04d", date.getDayOfMonth(), date.getMonthValue(), date.getYear()); Console.writeLine("%02d %s %04d %s", date.getDayOfMonth(), date.getMonth(), date.getYear(), date.getDayOfWeek()); } }

LocalDate sınıfı (ve tüm diğer Java 8 tarih-zaman sınıfları) geçerlilik kontrolü yapar.

/*---------------------------------------------------------------------------------------------------------------------- LocalDate sınıfı (ve tüm diğer Java 8 tarih-zaman sınıfları) geçerlilik kontrolü yapar. Bu sınıflar geçerli olmayan bilgiler için DateTimeException nesnesi fırlatır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; importjava.time.Month; classApp { publicstaticvoidmain(String[] args) { vardate = LocalDate.of(2019, Month.FEBRUARY, 29); Console.writeLine("%02d/%02d/%04d", date.getDayOfMonth(), date.getMonthValue(), date.getYear()); Console.writeLine("%02d %s %04d %s", date.getDayOfMonth(), date.getMonth(), date.getYear(), date.getDayOfWeek()); } }

LocalDate sınıfının now iismli static metodu sistemin tarih bilgisini elde etmekte kullanılır

/*---------------------------------------------------------------------------------------------------------------------- LocalDate sınıfının now iismli static metodu sistemin tarih bilgisini elde etmekte kullanılır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; classApp { publicstaticvoidmain(String[] args) { vardate = LocalDate.now(); Console.writeLine("%02d/%02d/%04d", date.getDayOfMonth(), date.getMonthValue(), date.getYear()); Console.writeLine("%02d %s %04d %s", date.getDayOfMonth(), date.getMonth(), date.getYear(), date.getDayOfWeek()); } }

LocalDate sınıfının isAfter ve isBefore metotları

/*---------------------------------------------------------------------------------------------------------------------- LocalDate sınıfının isAfter ve isBefore metotları----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; importjava.time.Month; classApp { publicstaticvoidmain(String[] args) { vartoday = LocalDate.now(); vardate = LocalDate.of(2020, Month.OCTOBER, 7); Console.writeLine(date.isAfter(today)); Console.writeLine(today.isBefore(date)); } }

ChronoUnit enum sınıfı ile tarih-zaman ölçümleri yapılabilir

/*---------------------------------------------------------------------------------------------------------------------- ChronoUnit enum sınıfı ile tarih-zaman ölçümleri yapılabilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; importjava.time.Month; importjava.time.temporal.ChronoUnit; classApp { publicstaticvoidmain(String[] args) { vartoday = LocalDate.now(); vardate = LocalDate.of(1999, Month.AUGUST, 17); Console.writeLine(ChronoUnit.DAYS.between(date, today)); Console.writeLine(ChronoUnit.YEARS.between(date, today)); Console.writeLine(ChronoUnit.MONTHS.between(date, today)); } }

Sınıf Çalışması: Doğum günü kutlaması (2)

/*---------------------------------------------------------------------------------------------------------------------- Sınıf Çalışması: Klavyeden alınan gün, ay ve yıl bilgilerine göre kişinin doğum günü geçmişse "geçmiş doğum gününüz kutlu olsun", o an doğum günü ise "doğum gününüz kutlu olsun", doğum henüz gelmemişse "doğum gününüzü şimdiden kutlarız" mesajlarından birini ekrana basan programı Calendar sınıfını kullanarak yazınız----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; importjava.time.temporal.ChronoUnit; classApp { publicstaticvoidmain(String[] args) { BirthDateApp.run(); } } finalclassBirthDateApp { privatestaticBirthDateInfogetBirtDateInfo() { Console.writeLine("Doğum tarihi bilgilerinizi giriniz:"); varday = Console.readInt("Gün?", "Hatalı giriş yaptınız:"); if (day <= 0) returnnull; varmon = Console.readInt("Ay?", "Hatalı giriş yaptınız:"); varyear = Console.readInt("Yıl?", "Hatalı giriş yaptınız:"); returnnewBirthDateInfo(day, mon, year); } privateBirthDateApp() {} publicstaticvoidrun() { while (true) { varbirthDateInfo = getBirtDateInfo(); if (birthDateInfo == null) break; Stringmessage = ""; switch (birthDateInfo.getDateStatus()) { caseAFTER: message = "Doğum günüzünüzü şimdiden kutlarız"; break; caseBEFORE: message = "Geçmiş doğum gününüz kutlu kutlarız"; break; default: message = "Doğum gününüz kutlu olsun"; } Console.writeLine("%s. Yaşınız:%f", message, birthDateInfo.getAge()); } Console.writeLine("Tekrar yapıyor musunuz?"); } } enumDateStatus {BEFORE, AFTER, SAME} classBirthDateInfo { privateLocalDatem_birthDate; publicBirthDateInfo() { m_birthDate = LocalDate.now(); } publicBirthDateInfo(intday, intmon, intyear) { setBirthDate(day, mon, year); } publicvoidsetBirthDate(intday, intmon, intyear) { m_birthDate = LocalDate.of(year, mon, day); } publicdoublegetAge() { returnChronoUnit.DAYS.between(m_birthDate, LocalDate.now()) / 365.; } publicDateStatusgetDateStatus() { vartoday = LocalDate.now(); varbirthDay = m_birthDate.withYear(today.getYear()); DateStatusdateStatus = DateStatus.SAME; if (birthDay.isAfter(today)) dateStatus = DateStatus.AFTER; elseif (birthDay.isBefore(today)) dateStatus = DateStatus.BEFORE; returndateStatus; } }

LocalDate sıfınının plusXXX metotları

/*---------------------------------------------------------------------------------------------------------------------- LocalDate sıfınının plusXXX metotları----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; classApp { publicstaticvoidmain(String[] args) { vartoday = LocalDate.now(); vardate = today.plusWeeks(7); Console.writeLine(today); Console.writeLine(date); } }

LocalDate sıfınının metotları ile zincir çağırma yapılabilir

/*---------------------------------------------------------------------------------------------------------------------- LocalDate sıfınının metotları ile zincir çağırma yapılabilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; classApp { publicstaticvoidmain(String[] args) { vartoday = LocalDate.now(); vardate = today.plusWeeks(7).minusDays(3); Console.writeLine(today); Console.writeLine(date); } }

LocalTime sınıfının atDate metodu

/*---------------------------------------------------------------------------------------------------------------------- LocalTime sınıfının atDate metodu----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; importjava.time.LocalDateTime; importjava.time.LocalTime; classApp { publicstaticvoidmain(String[] args) { vartime = LocalTime.of(11, 33, 34); LocalDateTimedatetime = time.atDate(LocalDate.now()); Console.writeLine(datetime); } }

LocalDate sınıfının atTime metodu

/*---------------------------------------------------------------------------------------------------------------------- LocalDate sınıfının atTime metodu----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDate; importjava.time.LocalDateTime; importjava.time.LocalTime; importjava.time.Month; classApp { publicstaticvoidmain(String[] args) { vardate = LocalDate.of(2020, Month.APRIL, 12); LocalDateTimedatetime = date.atTime(LocalTime.now()); Console.writeLine(datetime); } }

Sınıf Çalışması

/*---------------------------------------------------------------------------------------------------------------------- Sınıf Çalışması: 17.08.1999 tarihinde 03:02:00 zamanında gerçekleşmiş olan büyük depremden bu zamana kadar geçen süreyi saniye olarak artarak devam eden bir biçimde ekrana basan metodu yazınız (ileride daha iyisi yazılacak. Bu efektif olmayan versiyon) (İşletim sisteminin console'nu (terminal) kullanarak test ediniz----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.samples.bigearthquakeremainderapp.BigEarthquakeRemainderApp; classApp { publicstaticvoidmain(String[] args) { BigEarthquakeRemainderApp.run(); } } packageorg.csystem.samples.bigearthquakeremainderapp; importjava.time.LocalDateTime; importjava.time.Month; importjava.time.temporal.ChronoUnit; publicfinalclassBigEarthquakeRemainderApp { privateBigEarthquakeRemainderApp() {} publicstaticvoidrun() { varearthQuakeDateTime = LocalDateTime.of(1999, Month.AUGUST, 17, 3, 2); while (true) { varnow = LocalDateTime.now(); varseconds = ChronoUnit.SECONDS.between(earthQuakeDateTime, now); System.out.printf("Depremden bu zamana kadar geçen saniye:%d\r", seconds); } } }

LocalDateTime sınıfının toLocalDate ve toLocalTime sınıfları

/*---------------------------------------------------------------------------------------------------------------------- LocalDateTime sınıfının toLocalDate ve toLocalTime sınıfları----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importjava.time.LocalDateTime; classApp { publicstaticvoidmain(String[] args) { varnow = LocalDateTime.now(); vardate = now.toLocalDate(); vartime = now.toLocalTime(); Console.writeLine(now); Console.writeLine(date); Console.writeLine(time); } }

DateTimeUtil sınıfı ve test kodu

/*---------------------------------------------------------------------------------------------------------------------- DateTimeUtil sınıfı ve test kodu----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; importorg.csystem.util.datetime.DateTimeUtil; importjava.time.LocalDateTime; classApp { publicstaticvoidmain(String[] args) { varnow = LocalDateTime.now(); varmillis = DateTimeUtil.toMilliseconds(now); Console.writeLine(now); Console.writeLine(millis); vardatetime = DateTimeUtil.toLocalDateTime(millis); Console.writeLine(datetime); } } packageorg.csystem.util.datetime; importjava.time.*; publicfinalclassDateTimeUtil { privateDateTimeUtil() {} publicstaticlongtoMilliseconds(LocalDateTimelocalDateTime) { returntoMilliseconds(localDateTime, ZoneId.systemDefault()); } publicstaticlongtoMilliseconds(LocalDateTimelocalDateTime, ZoneIdzoneId) { returnlocalDateTime.atZone(zoneId).toInstant().toEpochMilli(); } publicstaticLocalDateTimetoLocalDateTime(longmilliseconds) { returntoLocalDateTime(milliseconds, ZoneId.systemDefault()); } publicstaticLocalDateTimetoLocalDateTime(longmilliseconds, ZoneIdzoneId) { returnInstant.ofEpochMilli(milliseconds).atZone(zoneId).toLocalDateTime(); } publicstaticlongtoMilliseconds(LocalDatelocalDate) { returntoMilliseconds(localDate, ZoneId.systemDefault()); } publicstaticlongtoMilliseconds(LocalDatelocalDate, ZoneIdzoneId) { returnlocalDate.atStartOfDay(zoneId).toInstant().toEpochMilli(); } publicstaticLocalDatetoLocalDate(longmilliseconds) { returntoLocalDate(milliseconds, ZoneId.systemDefault()); } publicstaticLocalDatetoLocalDate(longmilliseconds, ZoneIdzoneId) { returnInstant.ofEpochMilli(milliseconds).atZone(zoneId).toLocalDate(); } }

Java'da içiçe tür bildirimleri (nested types):

/*---------------------------------------------------------------------------------------------------------------------- Java'da içiçe tür bildirimleri (nested types): Java'da içiçe tür bildirimleri yapılabilir. Burada öncelikle sınıf içerisinde sınıf bildirimleri ele alınacaktır. Java'da 4(dört) şekilde sınıf içerisinde sınıf bildirimi yapılabilir: 1. static sınıf bildirimi (nested class) 2. non-static sınıf bildirimi (inner class) 3. Yerel sınıf bildirimi (local classes) 4. Anonim sınıf bildirimi (anonymous class) Anahtar Notlar: Bunlar dışında Java 8 ile eklenmiş fonksiyonel programlama tekniklerinin daha gelişmiş olarak yapılabilmesini sağlayan "Lambda ifadeleri ve metot referansları" konusu ileride detaylı olarak ele alınacaktır----------------------------------------------------------------------------------------------------------------------*/

Hiç bir tür içerisinde bulunmayan bir sınıfa "top-level class" denir

/*---------------------------------------------------------------------------------------------------------------------- Hiç bir tür içerisinde bulunmayan bir sınıfa "top-level class" denir----------------------------------------------------------------------------------------------------------------------*/

Top-level class'lar static olarak bildirilemez

/*---------------------------------------------------------------------------------------------------------------------- Top-level class'lar static olarak bildirilemez----------------------------------------------------------------------------------------------------------------------*/staticclassSample { //error }

Bir sınıf içerisinde başka bir sınıf static olarak bildirilebilir.

/*---------------------------------------------------------------------------------------------------------------------- Bir sınıf içerisinde başka bir sınıf static olarak bildirilebilir. Bu durumda içteki sınıf dıştaki sınıfın bir elemanıdır (member). Dolayısıyla sınıfın bir elemanı static olabileceğinden (ctor hariç) içteki sınıf da static anahtar sözcüğü ile bildirilebilir. Tüm sınıf elemanlarında olduğu gibi içte bildirilen bir sınıf da erişim belirleyici alabilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classA { publicstaticclassB { //... } privatestaticclassC { //... } staticclassD { //... } protectedstaticclassE { //... } }

static sınıfların da elemanları olabilir.

/*---------------------------------------------------------------------------------------------------------------------- static sınıfların da elemanları olabilir. static bir sınıfa sınıf dışından onu kapsayan sınıf ismi ve nokta operatörü ile erişilebilir. Şüphesiz bu durumda erişim belirleyicinin de uygun olması gerekir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { A.Bb = newA.B(); b.x = 10; b.foo(); A.B.bar(); } } classA { publicstaticclassB { publicintx; publicvoidfoo() { System.out.println("foo"); } publicstaticvoidbar() { System.out.println("bar"); } } }

static sınıflar static elemanlar olduğundan import static bildirimi ile isimleri doğrudan kullanılabilir.

/*---------------------------------------------------------------------------------------------------------------------- static sınıflar static elemanlar olduğundan import static bildirimi ile isimleri doğrudan kullanılabilir. Ancak bu durumda kullanım "yop-level class" biçiminde olduğundan okunabilirliğin bozulmamasına dikkat edilmelidir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importstaticorg.csystem.app.A.B; classApp { publicstaticvoidmain(String[] args) { Bb = newB(); b.x = 10; b.foo(); B.bar(); } } classA { publicstaticclassB { publicintx; publicvoidfoo() { System.out.println("foo"); } publicstaticvoidbar() { System.out.println("bar"); } } }

Kapsayan sınıfta static sınıfın elemanlarına erişilebilir

/*---------------------------------------------------------------------------------------------------------------------- Kapsayan sınıfta static sınıfın elemanlarına erişilebilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { Aa = newA(); a.tar(10); } } classA { publicvoidtar(intval) { Bb = newB(); b.x = val; b.foo(); B.bar(); } publicstaticclassB { publicintx; publicvoidfoo() { System.out.println("foo"); System.out.printf("x=%d%n", x); } publicstaticvoidbar() { System.out.println("bar"); } } }

Kapsayan sınıfta static sınıfın private elemanlarına da erişilebilir

/*---------------------------------------------------------------------------------------------------------------------- Kapsayan sınıfta static sınıfın private elemanlarına da erişilebilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { Aa = newA(); a.tar(10); } } classA { publicvoidtar(intval) { Bb = newB(); b.m_x = val; b.foo(); B.bar(); } privatestaticclassB { privateintm_x; privatevoidfoo() { System.out.println("foo"); System.out.printf("x=%d%n", m_x); } privatestaticvoidbar() { System.out.println("bar"); } } }

static sınıf kapsayan sınıfın private elemanlarına erişebilir

/*---------------------------------------------------------------------------------------------------------------------- static sınıf kapsayan sınıfın private elemanlarına erişebilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { A.Bb = newA.B(); b.foo(30); } } classA { privateintm_x; privatevoidtar(intval) { System.out.println("A.tar"); } publicstaticclassB { privateintm_x; publicvoidfoo(intval) { System.out.println("foo"); m_x = val; System.out.printf("B.m_x=%d%n", m_x); Aa = newA(); a.tar(30); a.m_x = 2 * m_x; System.out.printf("A.m_x=%d%n", a.m_x); } privatestaticvoidbar() { System.out.println("bar"); } } }

Aşağıdaki durumda B sınıfının foo metodu kendisini çağırdığından exception oluşur

/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki durumda B sınıfının foo metodu kendisini çağırdığından exception oluşur----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { A.Ba = newA.B(); a.foo(10); } } classA { privatestaticvoidfoo(intval) { System.out.println("A.foo"); } publicstaticclassB { publicvoidfoo(intval) { System.out.println("B.foo"); foo(val); //recursion } } }

Yukarıdaki problem aşağıdaki gibi çözülebilir

/*---------------------------------------------------------------------------------------------------------------------- Yukarıdaki problem aşağıdaki gibi çözülebilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { A.Ba = newA.B(); a.foo(10); } } classA { privatestaticvoidfoo(intval) { System.out.println("A.foo"); } publicstaticclassB { publicvoidfoo(intval) { System.out.println("B.foo"); A.foo(val); } } }

Aşağıdaki bar çağrısı doğrudan yapılmıştır.

/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki bar çağrısı doğrudan yapılmıştır. Bu durumda bar ismi B sınıfında bulunmadığından onu kapsayan A sınıfına da bakılır. Yani aşağıdaki durumda bar çağrısı için sınıf ismi kullanmaya gerek yoktur----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { A.Ba = newA.B(); a.foo(10); } } classA { privatestaticvoidbar(intval) { System.out.println("A.bar"); } publicstaticclassB { publicvoidfoo(intval) { System.out.println("B.foo"); bar(val); } } }

Android programalamada kullanılan meşhur R sınıfı

/*---------------------------------------------------------------------------------------------------------------------- Android programalamada kullanılan meşhur R sınıfı, içerisinde static bildirilmiş sınıflar olacak şekilde tasarlanmıştır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { //... } } classView { } classTextViewextendsView { //... } classButtonextendsView { //... } classContext { publicViewfindViewById(intid) { //...returnnewView(); } } classActivityextendsContext { //... } classMyActivityextendsActivity { privateTextViewm_textViewResult; privateButtonm_buttonOK; publicvoidonCreate(/*...*/) { m_textViewResult = (TextView)findViewById(R.id.MAINACTIVITY_TEXTVIEW_RESULT); m_buttonOK = (Button)findViewById(R.id.MAINACTIVITY_BUTTON_OK); } } classR { publicstaticclassid { publicstaticfinalintMAINACTIVITY_TEXTVIEW_RESULT = 0x1234; publicstaticfinalintMAINACTIVITY_BUTTON_OK = 0x1234; } publicstaticclassstring { publicstaticfinalintlabel_name = 0x3456; publicstaticfinalintok_button_text = 0x34568; //... } publicstaticclasscolor { publicstaticfinalintred_color = 0x567; //... } //... }

Bir sınıf içerisinde non-static bildirilmiş bir sınıf olabilir (inner class)

/*---------------------------------------------------------------------------------------------------------------------- Bir sınıf içerisinde non-static bildirilmiş bir sınıf olabilir (inner class)----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classA { publicclassB { //... } }

inner class'ın static elemanları olamaz

/*---------------------------------------------------------------------------------------------------------------------- inner class'ın static elemanları olamaz----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classA { publicclassB { privatestaticintms_x; //errorpublicstaticvoidfoo() //error {} } }

inner class türünden bir nesne kapsadığı sınıf dışında referans.new sentaksı ile yaratılabilir.

/*---------------------------------------------------------------------------------------------------------------------- inner class türünden bir nesne kapsadığı sınıf dışında <referans>.new sentaksı ile yaratılabilir. Yani bir inner class türünden nesnenin yaratılabilmesi için kapsayan sınıf türünden bir nesne yaratılmış olmalıdır. Daha açık olarak söylemek gerekirse, inner class türünden bir nesne kapsadığı sınıf türünden bir nesne kullanılarak yaratılabilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { Ax = newA(); A.By = x.newB(); y.foo(); A.Bz = x.newB(); z.foo(); } } classA { publicclassB { publicvoidfoo() { System.out.println("B.foo"); } } }

non-static bildirilmiş bir sınıf içerisinde o nesnenin ilişkin olduğu kapsayan sınıf nesnesinin non-static veri elemanlarına doğrudan erişilebilir

/*---------------------------------------------------------------------------------------------------------------------- non-static bildirilmiş bir sınıf içerisinde o nesnenin ilişkin olduğu kapsayan sınıf nesnesinin non-static veri elemanlarına doğrudan erişilebilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { Ax = newA(); A.By = x.newB(); y.foo(23); System.out.printf("x.m_a=%d%n", x.getA()); varz = x.newB(); z.foo(67); System.out.printf("x.m_a=%d%n", x.getA()); } } classA { privateintm_a; publicintgetA() {returnm_a;} publicclassB { publicvoidfoo(intval) { m_a = val; } } }

Anahtar Notlar: static ve non-static sınıflar için derleyici ürettiği arakod isimlendirmesinde kapsayan sınıf ismini de dahil eder.

/*---------------------------------------------------------------------------------------------------------------------- Anahtar Notlar: static ve non-static sınıflar için derleyici ürettiği arakod isimlendirmesinde kapsayan sınıf ismini de dahil eder. Genel isimlendirme: class A { publix class B { } } bildirimi için B ister static ister non-static olsun, B'nin byte kodu A$B.class dosyası biçiminde yaratılır----------------------------------------------------------------------------------------------------------------------*/

inner class içerisinde A nın static metotları da doğrudan çağrılabilir

/*---------------------------------------------------------------------------------------------------------------------- inner class içerisinde A nın static metotları da doğrudan çağrılabilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { Ax = newA(); A.By = x.newB(); y.bar(); } } classA { publicstaticvoidfoo() { System.out.println("A.foo"); } publicclassB { publicvoidbar() { foo(); } } }

Aşağıdaki örnekte B'nin foo metodu içerisinde kendisini çağırmaması için A sınıfının foo metodu çağrısında sınıf ismi kullanılmıştır

/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte B'nin foo metodu içerisinde kendisini çağırmaması için A sınıfının foo metodu çağrısında sınıf ismi kullanılmıştır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { Ax = newA(); A.By = x.newB(); y.foo(); } } classA { publicstaticvoidfoo() { System.out.println("A.foo"); } publicclassB { publicvoidfoo() { A.foo(); } } }

Tekrar: "non-static bir metoda metodu çağırmakta kullanılan referans gizlice geçirilir"

/*---------------------------------------------------------------------------------------------------------------------- Tekrar: Arakod düzeyinde non-stati metot kavramı doğrudan yoktur. Tüm metotlar static metotlara dönüştürülür. Şüphesiz bu mantıksal bir anlatımdır. Daha aşağı seviyede static metot kavramı da yoktur. Çağırma işleminde de non-static metodu çağırmada kullanılan referans argüman olarak oluşturulan static metoda geçilir. Aşağıdaki kodlar temsili yazılmış kodlardır Yani kısaca şu söylenebilir: "non-static bir metoda metodu çağırmakta kullanılan referans gizlice geçirilir"----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { Samples = newSample(); s.foo(20); //Bu çağrının arakod temsili karşılığıSample.foo(s, 20); } } classSample { privateintm_val; //...publicvoidfoo(intval) { m_val = val; } //foo metodunun arakoddaki temsili karşılığıpublicstaticvoidfoo(Samples, intval) { s.m_val = val; } }

Tekrar: İşte yukarıda belirtilen gizlice geçirilen adrese non-static metot içerisinde this referansı ile erişilebilir

/*---------------------------------------------------------------------------------------------------------------------- Tekrar: İşte yukarıda belirtilen gizlice geçirilen adrese non-static metot içerisinde this referansı ile erişilebilir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { } } classSample { privateintm_val; //...publicvoidfoo(intval) { this.m_val = val; this.bar(); } privatevoidbar() { //... } }

Tekrar: this referansını okunabilirliği bozmamak kaydıyla non-static metot çağrılarında kullanılmalıdır.

/*---------------------------------------------------------------------------------------------------------------------- Tekrar: this referansını okunabilirliği bozmamak kaydıyla non-static metot çağrılarında kullanılmalıdır. Bu durumda okunabilirlik açısından hangi metodun static hangi metodun non-static olduğu çağrıda anlaşılabilir duruma gelir----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { } } classSample { privateintm_val; //...publicvoidfoo(intval) { m_val = val; this.bar(); tar(); } privatevoidbar() { //... } privatestaticvoidtar() { } }

Tekrar: Aşağıdaki durumda this referansı kullanımı zorunludur

/*---------------------------------------------------------------------------------------------------------------------- Tekrar: Aşağıdaki durumda this referansı kullanımı zorunludur----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; classApp { publicstaticvoidmain(String[] args) { Pointp = newPoint(100, 100); Console.writeLine("(%d, %d)", p.x, p.y); } } classPoint { publicintx, y; publicPoint(intx, inty) { this.x = x; this.y = y; } }

Aşağıdaki örnekte foo metodunun içerisinde this referansı B sınıfı türünden olduğundan error oluşur

/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte foo metodunun içerisinde this referansı B sınıfı türünden olduğundan error oluşur----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { } } classA { privateintm_x; publicvoidbar() { //.. } publicclassB { publicvoidfoo(intval) { this.m_x = val; //error:this.bar(); //error: } } }

Yukarıdaki durumdan dolayı aşağıdaki çağırmada exception oluşur (StackOverflowException)

/*---------------------------------------------------------------------------------------------------------------------- Yukarıdaki durumdan dolayı aşağıdaki çağırmada exception oluşur (StackOverflowException)----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { Aa = newA(); A.Bb = a.newB(); b.foo(45); } } classA { privateintm_x; publicvoidfoo() { //.. } publicclassB { publicvoidfoo(intval) { m_x = val; this.foo(val); } } }

this expression'ın genel biçimi

/*---------------------------------------------------------------------------------------------------------------------- this expression'ın genel biçimi <sınıf ismi>.this şeklindedir. Bu durumda this expression ile kullanılan sınıf türünden referans elde edilmiş olur. Aşağıdaki kodda A.this diyerek B'nin içerisinde gizlice tutulan A referansına erişilmiş olur. Bu A referansı ilgili B nesnesinin yaratılmasında kullanılan A nesnesinin referansıdır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; importorg.csystem.util.Console; classApp { publicstaticvoidmain(String[] args) { Aa = newA(); A.Bb = a.newB(); b.foo(45); } } classA { privateintm_x; publicvoidfoo(intval) { Console.writeLine("A.foo"); } publicclassB { publicvoidfoo(intval) { m_x = val; Console.writeLine("B.foo"); A.this.foo(val); } } }

Aşağıdaki örnekte makeText metoduna foo içerisinde ilgili B nesnesinin yaratılmasında kullanılan A nesnesinin referansının geçirilmesi gerektiğinden this expression kullanılmalıdır

/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte makeText metoduna foo içerisinde ilgili B nesnesinin yaratılmasında kullanılan A nesnesinin referansının geçirilmesi gerektiğinden this expression kullanılmalıdır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { } } classToast { publicstaticvoidmakeText(Aa, Stringmessage) { //... } } classA { //...classB { publicvoidfoo(Stringmessage) { Toast.makeText(A.this, message); } } }

Aşağıdaki örnekte bellek sızıntısı (memory leak) oluşur.

/*---------------------------------------------------------------------------------------------------------------------- Aşağıdaki örnekte bellek sızıntısı (memory leak) oluşur. İleride böyle bir senaryoda bellek sızıntısı durumunun nasıl engelleneceği çeşitli yöntemlerle ele alınacaktır----------------------------------------------------------------------------------------------------------------------*/packageorg.csystem.app; classApp { publicstaticvoidmain(String[] args) { Sample.foo(); Sample.foo(); while (true) //Program devam ediyor ; } } classSample { publicstaticvoidfoo() { Aa = newA(); a.doWork("merhaba"); } } classA { privateBm_b; privateclassB { publicvoidfoo(Stringmessage) { } } //...publicvoiddoWork(Stringmessage) { m_b = this.newB(); m_b.foo(message); } } /*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
close