PDA

View Full Version : سوالاتی درمورد System.out



khajavi
شنبه 20 بهمن 1386, 19:00 عصر
− برنامه ی زیر چرا java.io را را وارد کرده؟ آیا واقعا نیازی به اینکار هست؟

import java.io.*;
public class AsciiChart {
public static void main(String[] args) {
for (int i = 32; i < 127; i++) {
System.out.write(i);
// break line after every eight characters.
if (i % 8 == 7) System.out.write('\n');
else System.out.write('\t');
}
System.out.write('\n');
}
}
۲− چرا اگر برنامه ی بالا را به برنامه ی زیر تغییر دهیم کاراکتر های اسکی را نشان نمی دهد؟

import java.io.*;
public class AsciiChart {
public static void main(String[] args) {
System.out.write(32);
System.out.write('\t');
System.out.write(33);
}
}
۳− این را می دانم که System یکی از کلاس هاس .java.lang می باشد. اما به .out و .in و .err چه می گویند؟

handinux
شنبه 20 بهمن 1386, 21:22 عصر
شاید بهتر باشد System را یک پکیج بنامیم

javaphantom
شنبه 20 بهمن 1386, 22:31 عصر
شاید بهتر باشد System را یک پکیج بنامیم

System به هیچ عنوان یک package نمی باشد.
۱ بدلیل قواعد نام گذاری در جاو که تمام package ها اول اسم آنها با حروف کوچک شروع می شه.
System یک کلاس هست توی package ی به نام lang . شامل سه field داره که این سه فیلد همگی به صورت static و همچنین بصورت final یا همان ثابت و از همه مهمتر در سطح دسترسی بصورت public می باشند. نامهای آنها عبارتند از
in استانداردی برای پاسخگویی به جریانهای ورودی
out استانداردی برای پاسخگویی به جریانهای خروجی
err استانداردی برای پاسخگویی به error ها بوحود آمده در خروجی
به هیچ عنوان نمی توان به آنها مقدار داد چون final یا همان ثابت تعریف شدن
هنگامه استفاده از آنها نیازی به گرفتن instance از کلاس System نیست چون بصورت static تعریف شدند یعنی مستقل از کلاس هستند برای همین است که به راحتی System.out استفاده می شه. در دسترس همیشه هستند چون سطح دسترسی آنها بصورت public تعریف شده.

khajavi
شنبه 20 بهمن 1386, 23:19 عصر
عالی بود. یکی از موضوعات مبهم برای من بود.

اما هنوز به طور کامل جوابم را نگرفتم.
چرا برنامه ی دومی که نوشتم خروجی نداره؟

javaphantom
یک شنبه 21 بهمن 1386, 07:24 صبح
عالی بود. یکی از موضوعات مبهم برای من بود.

اما هنوز به طور کامل جوابم را نگرفتم.
چرا برنامه ی دومی که نوشتم خروجی نداره؟

فیلد out از نوع java.io.PrintStream تعریف شده است. مثلا هنگامی که شما می گویید int a شما دارید یک متغییر به نام a درست می کند که از نوع int می باشد در نتیجه تمام خواص یک int را دارا می باشد. در کلاس System همانطور که گفته شد فیلد java.io.PrintStream out تعریف شده یعنی اگر بخواهیم درستر تعریفش کنید
public static final java.io.PrintStream out
در نتیجه ما به اعضای کلاس PrintStream از طریق out نیز دسترسی داریم. متد write در کلاس printStream است که اگر بخواهیم آن را کامل توضیح دهیم به صورت زیر است
public void write(byte b)
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz zzzz
وظیفه این method این است که مقدار گرفته شده در جریان خروجی بصورت بایت تحویل می دهد. برای همین است که شما در خروجی چیزی نمی بینید.
چون شما عدد ثابت داده اید سیستم دارد دارد در خروجی بایت تولید می کند.
در برنامه اول یک عدد داده نشده چندین عدد داره وارد stream می شه از طریق tab و enter بنا به شرط گذاشته شده به شما کاراکتر عدد را بر می گرداند
وجود n\ برای صدا کردن method flush می باشد که stream را پاک کند. پس هر بار که else اجرا می شه داره stream شما fush یا پاک می شود.

khajavi
یک شنبه 21 بهمن 1386, 07:52 صبح
۱−وقتی تایپ می کنم '\n' جاوا میاد این را به بایت تبدیل می کنه یعنی عدد ۱۰ یعتی چه من بنویسم '\n' یا بنویسم 10 فرقی نمی کنه. این موضوع چه ربطی به Flush() داره؟
۲− فیلد با متغیر چه فرقی می کنه؟

javaphantom
یک شنبه 21 بهمن 1386, 07:57 صبح
۱−وقتی تایپ می کنم '\n' جاوا میاد این را به بایت تبدیل می کنه یعنی عدد ۱۰ یعتی چه من بنویسم '\n' یا بنویسم 10 فرقی نمی کنه. این موضوع چه ربطی به Flush() داره؟
۲− فیلد با متغیر چه فرقی می کنه؟

خاصیت این method این هست که موقعی که به خط جدید رسید یا همان n\ که در شرط هم می باشد به صورت خودکار method دیگری از همان کلاس را صدا می کند یعنی flush
همین
جزو خاصیت این method هست