包跟访问控制
一、包的创建和使用
包是java程序中关于命名空间的一种手段,它可以有效的解决类重名的问题。当需要把一个类定义在某个包下的时候,需要使用package关键字来进行定义。当需要使用其他包下的类的时候,则需要使用import关键字进行导入。
例如:(package)
package com.ye_haiqiang; class PackageTest { public static void main(String[] args) { System.out.println("This is Package...."); } }
通常我们的习惯是直接会这样写:javac PackageTest.java,".class"文件就会生成在当前文件夹下,这时候我们 运行
java PackageTest就会出错,如图:
因为当某个文件属于某个程序包时,改文件中定义的类也是属于改程序包,在操作系统的命令行中必须使用全名访问这个类,即,java com.ye_haiqiang.PackageTest,但是这样还是会出错,
这是因为上述命令在装载类的时候再目录com.ye_haiiqang 下查找PackageTest.class文件,但是文件却是在当前文件下,所以我们要手动的创建文件com/ye_haiqiang,把PackageTest.class文件放在com/ye_haiqiang 文件底下,这时候我们在运行java com.ye_haiqiang.PackageTest 就不会出错了~
但是这样比较麻烦,可是使用-d参数运行javac。让她自动建立包对应的子目录,并将生产的".class"放进去....
操作如下:
导入文件包,除在建包上,写上import 报名.类名;如import com.ye_haiqiang.PackageTest,导入包下的所有类,import com.ye_haiqiang.*;
这里做一个补充:针对读者的意见我这里做一个比较完善的建包以及包的导入做一完整的例子。
这个例子是做一用户的操作。做一个用户的添加和修改
用户类:
package com.ye_haiqiang.entity; public class User { private String userId; private String userName; public void setUserId(String userId) { this.userId=userId; } public String getUserId() { return this.userId; } public void setUserName(String userName) { this.userName=userName; } public String getUserName() { return this.userName; } }
用户操作类:
package com.ye_haiqiang.dao; import com.ye_haiqiang.entity.User;//导入用户 public class UserDao { public void add(User user) { System.out.println("add user..."); System.out.println("userId="+user.getUserId()+" userName="+user.getUserName()); } public void modify(User user) { System.out.println("modify user..."); System.out.println("userId="+user.getUserId()+" userName="+user.getUserName()); } }
操作测试类:
package com.ye_haiqiang.test; import com.ye_haiqiang.entity.User;//导入用户 import com.ye_haiqiang.dao.UserDao;//导入用户操作 public class UserDaoTest { public static void main(String[] args) { User user=new User(); user.setUserId("001"); user.setUserName("zhangsan"); UserDao dao=new UserDao(); dao.add(user); dao.modify(user); } }
这些类都保存在myjava的文件夹里。
运行如下:(两种方法)
1、统一运行
2、逐个运行:
二、访问控制(private、protected、public和default)
public 可以被所有其他类访问。
private 只能被自身访问和修改
protected 自身,子类及同一个包中类可以访问
default:同一个包中的类可以访问,声明是没有加修饰符,认为是friendly(友好)
每天一点点,希望对大家有利~