View Full Version : مبتدی: بسته ها در جاوا
قله بلند
یک شنبه 22 آذر 1388, 20:35 عصر
با سلام
برنامه زیر که در بسته MyPack قرار گرفته است، کامپایل نمی شود. من یک پوشه با نام MyPack ایجاد کردم و فایل جاوای خود را با نام AccountBalance.java در آن قراردادم. پوشه MyPack نیز در پوشه bin قرار دارد. آخرین شاخه مسیر را نیز MyPack قرار دادم. جلوی خط فرمان نیز نوشتم:
…\MyPack>javac AccountBalance.javaولی پیغام می دهد که این فایل را پیدا نمی کند. وقتی هم می نویسم:
…\MyPack>javac MyPack.AccountBalance.javaباز هم مساله حل نمی شود.[code]//a simple package
package MyPack;
class Balance
{
String name;
double bal;
Balance(String n,double b)
{
name=n;
bal=b;
}
void show()
{
if(bal> ");
System.out.println(name+" :$"+bal);
}
}
}
public class AccountBalance
{
public static void main(String args[])
{
Balace current[]=new Balabce[3];
current[0]=new balabce("K .J. Fielding",123.23);
current[1]=new balabce("Will Tell",157.02);
current[2]=new balabce("Tom Jackson",-12.33);
for(int i=0;i
قله بلند
یک شنبه 22 آذر 1388, 20:36 عصر
البته ببخشید. هر چقدر سعی کردم تا کد خوب فرستاده شود نشد.
persianshadow
یک شنبه 22 آذر 1388, 21:58 عصر
زمان کامپایل از نقطه نباید استفاده کنید از \ استفاده کنید یه مرحله هم بیایید بیرون یعنی کلآ باید اینجوری
باشه :
c:\jdk\bin> javac MyPack\AccountBalance.java
و موقعی که میخوایید اجراش کنید از نقطه استفاده کنید.یعنی مثل زیر :
c:\jdk\bin> java MyPack.AccountBalance
قله بلند
دوشنبه 23 آذر 1388, 00:01 صبح
دستتون درد نکنه. مشکل کاملاً حل شد. فقط یه توضیحی بدم و اون اینکه در سه خط آخر برنامه موجود در پست اول این تاپیک، املای Balance صحیح است. وقتی برنامه ایراد می گرفت متوجه شون شدم. فقط گفتم که کار دچار ایراد نشه.
قله بلند
پنج شنبه 26 آذر 1388, 12:09 عصر
با سلام
برنامه زیر، همان برنامه پست اول این تاپیک است ولی با این تفاوت که خود کلاس، سازنده آن و تابع آن همگی عمومی هستند:
//a simple package
package MyPack;
public class Balance
{
String name;
double bal;
public Balance(String n,double b)
{
name=n;
bal=b;
}
public void show()
{
...................
package p1;
public class AccountBalance
{
public static void main(String args[])
{
MyPack.Balace current=new MyPack.Balabce("Tom Jackson",-12.33);
current.show();
}
}تا اینجا همه چیز به درستی انجام می شود ولی زمانیکه، تابع سازنده و show را از حالت عمومیت خارج می کنم و در حالت پیش فرض قرار می دهم، خطا صادر می شود. چرا؟
مگر وقتی کلاس، حالت عمومی دارد همه توابع داخل آنهم باید عمومی باشند؟ وقتی شیئی از کلاسی ساخته می شود، سازنده آن مگر فراخوانی نمی شود؟ مگر با تولید شیئی از یک کلاس نمی توان به توابع آن کلاس دسترسی پیدا کرد؟ مگر تا قبل از بحث بسته ها، اینگونه نبود؟
cups_of_java
پنج شنبه 26 آذر 1388, 14:15 عصر
ولی زمانیکه، تابع سازنده و show را از حالت عمومیت خارج می کنم و در حالت پیش فرض قرار می دهم، خطا صادر می شود. چرا؟
اگه درست متوجه شده باشم، زمانی که شما سازنده رو در حالت پیش فرض قرار میدی و public تعریفش نمی کنی طبیعتن نمی تونی از یک package دیگه از اون کلاس شی ایجاد کنی. چون حالت پیش فرض فقط در بین بسته قابل دسترسی هست.
persianshadow
پنج شنبه 26 آذر 1388, 14:27 عصر
وقتی شما متدی رو public تعریف نکنی یعنی از هیچ modifierی استفاده نکنی جاوا اون رو به صورت
package private در نظر میگیره یعنی اینکه صرفآ در محدوده پکیج خودش قابل دسترسی هست.
حالا برای کد شما هم همچنین چیزیه به این شکل که کد اول شما در پکیج MyPackage قرار داره.
و میایی method رو بدون modifier میزاری .حالا از پکیج دیگه یعنی پکیج p1 میخوای بهش دسترسی
داشته باشی که امکانش نیست.چون جاوا اون متد رو package private کرده و اجازه نمیده پکیج دیگهای
بهش دسترسی داشته باشه.پس باید حتمآ اون رو public تعریف کنی.
قله بلند
پنج شنبه 26 آذر 1388, 15:04 عصر
سلام
من پاسخ شما دو بزرگوار رو تازه خوندم و حتماً یک امتحانی هم می کنم ببینم همین کد رو با همین شرایط می تونم توی بسته MyPack فراخوانی کنم یا نه؟
ولی برایم یک سوال مطرح شد و آن اینکه، قبل از بحث بسته ها، من فایل ها را در پوشه bin ذخیره می کردم و اصلاً این حرف ها مطرح نبود که کلاس عمومی باشد، سازنده عمومی باشد و.... مگر خود پوشه bin یک بسته نیست؟
قله بلند
پنج شنبه 26 آذر 1388, 17:21 عصر
دقیقاً همینگونه است. وقتی پا را از یک بسته به بسته دیگر می گذاریم، باید کلاس، سازنده کلاس و توابع کلاس، عمومی تعریف شوند.ولی وقتی درون بسته هستیم، لزومی ندارد اینگونه رفتار کنیم. با حالت پیش فرض نیز دسترسی کاملاً امکان پذیر است. ممنون از توضیحات شما.
persianshadow
جمعه 27 آذر 1388, 17:38 عصر
نه bin یه پکیج نیست چون کامپایلر اونجاست،زیر پوشهها (sub directory) های درون این پوشه و یا
پوشههای خارج از اون پکیج محسوب میشن.و اگه شما کلاس جاوای رو در فایلی در این پوشه مستقیم
ذخیره کنی نیازی به ذکر نام پکیج نیست چون اصلآ پکیجی وجود نداره.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.