Kontrol Akışı Tanımlama – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları
Kontrol Akışı Tanımlama
Kontrol akışı, bir iş parçacığı tarafından yöntemlerin ve talimatların yürütülmesi sırasıdır. Java sanal makinesi (JVM), Java bayt kodu yönergelerini sınıf dosyasında bulundukları sırayla yürütür. Kontrol akışı, if, else gibi koşullu ifadeler kullanılarak ve for veya bir yöntem çağrılarak programlanabilir.
Kontrol akışının durdurulması, yürütülen talimat veya yöntemin farkındalığını ve çalışma zamanında yürütme akışını değiştirme yeteneğini içerir. Örneğin, JVM’nin kapanmasını önlemek için System.exit() çağrısına müdahale etmek isteyebilirsiniz. Olasılıklar konusunda fazla heyecanlanmadan önce, beklentileri açıklığa kavuşturmama izin verin.
Profil oluşturma modunda başlatılmadığı sürece, çalışan bir JVM’de herhangi bir talimat veya yöntem çağrısını yakalamanın doğrudan bir yolu yoktur. Yöntemlerin yürütülmesi JIT tarafından yapılır ve yöntem çağrılarına bir dinleyici veya kanca eklemek için kullanılabilecek standart bir Java API yoktur.
Ancak, yaygın senaryoların kontrolünü ele geçirmek için çeşitli dolaylı yaklaşımlara bakacağız. Hata ayıklama modunda herhangi bir aramayı engellemek için kullanılabilen JVM profiler arayüzünü de inceleyeceğiz.
Yakalama Sistemi Hataları
Sistem hataları, muhtemelen uygulama kontrolünün dışında olan anormal koşullarda JVM tarafından rapor edilir. Java.lang.Error’ın alt sınıfları olarak atılırlar ve bu nedenle bildirilmezler, yani imzası onları açıkça beyan etmese bile herhangi bir yöntemle atılabilirler.
Sistem hataları, OutOfMemoryError ve StackOverflowError gibi sanal makine hatalarını, ClassFormatError ve NoSuchMethodError gibi bağlantı hatalarını ve diğer hataları içerir. Geleneksel olarak, uygulama programcılarının yalnızca java.lang.Exception örneklerini yakalaması gerekir; bu, bellek yetersizliği gibi bir durumun uygulama hatası işleme mantığı aracılığıyla tespit edilmediği anlamına gelir.
Gerçek hayattaki uygulamaların çoğu için bu istenmez çünkü bir hata oluştuğunda hiçbir şey yapılamasa bile, uygulama genellikle hatayı bir günlük dosyasına kaydetmeli ve tutulan kaynakları serbest bırakmaya çalışmalıdır.
İyi bir tasarım çözümü, ana uygulama dizilerinde çağrı yığınının en üstünde bir try-catch bloğuna sahip olmak, Java.lang.Error veya Java.lang.Throwable’ı yakalamak ve hata durumunu, günlükleri analiz eden bir yönteme yetki vermektir. ve temiz bir kapatma girişiminde bulunur.
JVM’nin belleğinin yetersiz olduğu veya bir sınıfın bulunmadığı durumlarda uygulama, önbelleklerin içeriğini boşaltarak veya eksik sınıflardan etkilenen bir özelliği devre dışı bırakarak JVM’yi onarmaya çalışabilir. Her şey, iz bırakmadan utanç verici bir şekilde ortadan kaybolmaktan daha iyidir.
Yakalama Sistemi Akışları
Günlüğe kaydetme, Java uygulamaları için fiili bir gereklilik haline gelmeden önce, hata ayıklama izlerinin çıktısını almak için System.out.println kullanmak yaygındı. Bu yaklaşımın dezavantajları bol ve açıktır. Bu tür izler bir kez yazıldıktan sonra kod değiştirilmeden açılıp kapatılamaz.
Kalıcılık için uygulama çıktı akışı bir dosyaya yeniden yönlendirilebilse de, herhangi bir rollover yoktur ve dosya açık tutulduğu için uygulama kapatılana kadar silinemez (dolayısıyla dosya boyutu fahiş olabilir).
System.out.println() çağrılarıyla dolu eski Java koduyla uğraşırken, bunların günlük çerçevesine çağrılara dönüştürülmesi yaygın bir sorundur. İstisna’nın printStackTrace() gibi yöntemlerin çıktısını alan standart hata akışını yakalamak da önemlidir.
Bunun için zarif çözümlerden biri, çıktıyı System.out ve System.err’e almak ve günlük dosyasına göndermektir. Teknik, sistem çıkış akışının java.lang.System setOut yöntemi kullanılarak özel bir PrintStream’e yönlendirilebilmesine dayanır.
PrintStream, gerçek çıktıdan sorumlu olan bir OutputStream örneği etrafındaki bir dekoratör sınıfıdır. Bu nedenle eldeki görev, işlem standart çıktısı yerine bir günlük dosyasına yazan bir yeniden yönlendiren OutputStream geliştirmek ve ardından buna System.out’u atamaktır.
Java. sonsuz döngü
For döngüsü java
Java
Java Döngüler
Java.io.OutputStream’i genişleten ve çıktısını Apache Log4J kullanarak bir günlük dosyasına yazan LogOutputStream adında bir sınıf geliştireceğiz. Java giriş/çıkış çerçevesi çok iyi tasarlanmıştır ve OutputStream’in tüm yöntemleri sonunda bir tamsayı parametresi alan tek bir yönteme (write()) yetki verir.
LogOutputStream, write(int) yönteminde aldığı karakterleri biriktirmek için bir StringBuffer kullanır ve bir satır ayırıcı algılandığında, tüm arabellek Log4J kullanılarak diske yazılır.
Uygulamayla ilgili tek zor kısım, bir satırın sonunu tespit etmektir. Şüphesiz bildiğiniz gibi, Unix’te bir satırın sonu tek bir karakterle işaretlenir: \n (yeni satır). Windows’ta bir satırın sonu iki karakterin birleşimiyle işaretlenir.
Java’da gerçekten platformlar arası kod yazmak için line.separator adlı bir sistem özelliğine güvenmelisiniz. Özellik bir dize olduğundan, uygulamanın karakter karşılaştırması yerine bir alt dize aramasına dayanması gerekir.
Uygulamamız, önce bir satırın olası sonunu kontrol etmek için karakter karşılaştırmasını kullanacak ve ardından bunun gerçekten bir satırın sonu olduğundan emin olmak için bir alt dize araması kullanacak şekilde optimize edilmiştir. Geçersiz kılınan write() yöntemi gösterilir.
Böylece, System.out çıktısının tamamı, LogOutputStream sınıfından INFO düzeyinde iletiler olarak Log4J çerçevesine yeniden yönlendirilir. Sınıfımızı çalışırken görmek için, log4j.properties içinde bir dosya ekleyici yapılandırmalı ve gösterildiği gibi durdurucuyu kurmalıyız.
LogOutputStream’in main() yöntemini çalıştırmak, konsolda Interceptor yükleniyor… iletisini görüntüler ancak günlük dosyasına Hello, world ve Done iletilerini yazar. Aynı önleyici, System.err akışı için kurulabilir.
Esnek hale getirmek için, yapıcıda günlük seviyesini ve bir akış adını alacak şekilde parametrelendirilebilir. Benzer bir şekilde, System.In akışı, istenen bir girişi bir uygulamaya beslemek için System.setIn() kullanılarak programlı olarak ayarlanabilir.
JVM işlemi normalde hiçbir etkin iş parçacığı olmadığında sona erer. Arka plan programı olarak çalışan iş parçacıkları (Thread.isDaemon() == true), JVM’nin kapatılmasını engellemez. Swing GUI’leri ve RMI sunucularını içeren çok iş parçacıklı uygulamalarda, tüm iş parçacıklarının incelikle sona ermesine izin vererek temiz bir kapatma elde etmek kolay değildir. Sıklıkla, JVM’yi zorla kapatmak ve işlemi sonlandırmak için System.exit() çağrısı yapılır.
System.exit()’e güvenmek, çok karmaşık olmayan programlarda bile yaygın bir uygulama haline geldi; uygulama geliştiricinin hayatını kolaylaştırsa da Web ve uygulama sunucuları gibi orta seviye ürünlerde sorun teşkil edebiliyor.
Örneğin, bir Web uygulaması tarafından yanlışlıkla System.exit()’e yapılan bir çağrı, Web sunucusu sürecini çökertebilir ve muhtemelen kullanıcıların diğer Web uygulamalarına ve statik HTML sayfalarına erişmesini engelleyebilir. Bu, sistem yöneticileriyle arkadaş olmanın bir yolu değildir ve her iyi geliştirici, o ekiple sağlıklı bir ilişkinin değerini bilir.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)