JAVA 包与包之间访问(package)

//仅作为学习笔记

一、包的用处

  • 对类文件进行分类管理。
  • 给类提供多层命名空间。
  • 写在程序文件的第一行。
  • 类名的全称的是  :包名.类名。
  • 包也是一种封装形式。

package cn.itstu;
class PackageDemo
{    
	/*
	用javac -d . PackageDemo.java  在当前目录下自动生成包的文件夹
	【javac -d c:\ PackageDemo.java】在指定目录C盘下自动生成包的文件夹
	注意:运行.class的文件时正确的类名是:java cn.itstu.PackageDemo
	*/
	public static void main(String args[])
	{
		System.out.println("hello package!!");
	}
}

二、包与包之间的访问
package cn.itstu;
class PackageDemo
{    
	/*
	  将源文件编译打包到C:\myclass 文件夹下
	*/
	public static void main(String args[])
	{   
		/* cmd输入命令
		 1.javac -d c:\myclass DemoA.java
		 2.set classpath=c:\myclass
		 3.javac -d c:\myclass PackageDemo.java
		 4.java cn.itstu.PackageDemo
		*/
		packa.DemoA d=new packa.DemoA();
        d.show();

		//packb.DemoB b=new packb.DemoB(); 
		//b.method();  error 访问权限不够
	}
}



package packa;
public class DemoA extends packb.DemoB //类的权限必须是public
{
	
		public void show()//方法的权限也必须是public
		{
			System.out.println("demoa show run");
			method();
		}
	
}

package packb;
public class DemoB 
{
  /* public */ protected void method()
	{
	   System.out.println("demob method run");
	}

	/*当method方法被public修饰,可以被其子类DemoA访问,
	也可以被其他包的类访问,但是当method方法被protected
	修饰,method方法只能被其子类访问。
	*/
}
结论:
  1. 包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。
  2. 不同包中的子类还可以直接访问父类中被protected权限修饰的成员。
  3. 包与包之间可以使用的权限只有两种,public  protected。
               public       protected      default         private
同一类中    OK             OK                OK                 OK
同一包中    OK             OK                OK                 NO
子类            OK             OK                NO                 NO
其他类中    OK             NO                NO                 NO

三、导包 import
通过import我们可以简化类名的书写。
包名我们一般用url,因为url具有唯一性。如: package com.qq.demo;
 导包:import com.qq.demo.*;  //*是通配符,表示导入com.qq.demo包下的所有类,开发中推荐使用导入具体类名,需要哪个类导入哪个,可以节省内存开销,如:
import com.qq.demo.ClassA;

注意:我们导入两个包 import packa.*;   import packb.*;  如果这两个包中有相同的类classA存在,我们在使用类的时候必须指明使用哪个包下的该类
如  :packa.ClassA  a=new packa.ClassA();
       packb.ClassA  b=new packb.ClassA();


四、jar包

  • Java的压缩包
  • 方便项目的携带。
  • 方便于使用,只要在classpath设置jar路径即可。
  • 数据库驱动,SSH框架等都是以jar包体现的。
通过jar.exe工具对jar的操作。
• 创建jar包           jar  -cvf  mypack.jar  packa packb
• 查看jar包           jar  -tvf  mypack.jar   [>定向文件]               如:jar  -tvf  mypack.jar  >c:\1.txt
• 解压缩               jar  -xvf  mypack.jar
• 自定义jar包的清单文件         jar –cvfm  mypack.jar  mf.txt  packa packb






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.example.f1_telephone; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.PhoneLookup; import android.database.Cursor; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.content.ContentResolver; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; public class MainActivity extends Activity implements OnItemClickListener{ private ListView listView; private TelephoneAdapter adapter; private List<TelephoneBean>list=new ArrayList<TelephoneBean>(); private TelephoneBean bean; Intent phoneIntent; String str; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView=(ListView) findViewById(R.id.listView); //得到ContentResolver对象 ContentResolver cr = getContentResolver(); //取得电话本中开始一项的光标 Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); //向下移动光标 while(cursor.moveToNext()) { //取得联系人名字 int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME); String contact = cursor.getString(nameFieldColumnIndex); //取得电话号码 String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null); while(phone.moveToNext()) { String PhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); bean=new TelephoneBean(contact, PhoneNumber); list.add(bean); } } adapter=new TelephoneAdapter(this, list); listView.setAdapter(adapter); cursor.close(); listView.setOnItemClickListener(this); } private void send1(String number){ Uri uri = Uri.parse("smsto:" + number); Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri); startActivity(sendIntent); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { str=list.get(arg2).getNumber(); phoneIntent = new Intent("android.intent.action.CALL",Uri.parse("tel:" + str)); AlertDialog dialog=new AlertDialog.Builder(this).setTitle("请选择服务项目").setItems(new String[]{"拨打电话","发送短信"}, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if(which==0){ startActivity(phoneIntent); } if(which==1){ send1(str); } } }).setNegativeButton("取消", null).show(); } } package com.example.f1_telephone; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class TelephoneAdapter extends BaseAdapter{ private Context context; private List<TelephoneBean>list=new ArrayList<TelephoneBean>(); public TelephoneAdapter(Context context,List<TelephoneBean>list) { this.context=context; this.list=list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int arg0) { return list.get(arg0); } @Override public long getItemId(int arg0) { return arg0; } @Override public View getView(int arg0, View arg1, ViewGroup arg2) { Holde holde=new Holde(); if(arg1==null){ arg1=LayoutInflater.from(context).inflate(R.layout.list_telephone, null); holde.tvname=(TextView) arg1.findViewById(R.id.tv_name); holde.tvnumber=(TextView) arg1.findViewById(R.id.tv_number); arg1.setTag(holde); } else{ holde=(Holde) arg1.getTag(); } TelephoneBean telephoneBean=list.get(arg0); holde.tvname.setText(telephoneBean.getName()); holde.tvnumber.setText(telephoneBean.getNumber()); return arg1; } private class Holde{ public TextView tvname; public TextView tvnumber; } } package com.example.f1_telephone; public class TelephoneBean { public String name; public String number; public TelephoneBean(String name,String number) { this.name=name; this.number=number; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值