作者:钧广摄影__ | 来源:互联网 | 2023-06-01 23:05
目录
package、import
访问控制权限
package、import
-
java语言中的package和import机制:
1、为什么要使用package?package是java中包机制。包机制的作用是为了方便程序的管理。不同功能的类分别放在不同的包下。(按照功能划分的,不同的包具有不同的功能)
2、package怎么用?package是一个关键字,后面加包名。例如:package com.javase.day1206;注意:package语句只允许出现在java源代码的第一行3、包名有没有命名规范? 有一般采用公司域名倒序的方式(因为公司域名具有全球唯一性。)包名命名规范:公司域名倒序 + 项目名 + 模块名 + 功能名4、对于带有package的java程序怎么编译?怎么运行?采用之前的编译和运行 不行了类名不再是HelloWorld了类名:com.javase.day1206.HelloWorld用文本编辑器编写的带包文件的编译运行:在编写当前文件的地址栏cmd直接进入dos界面,然后编译,然后输入以下命令运行不能用之前那种切换目录的方式。使用这种方式直接生成包的目录,直接编译不生成目录且无法运行。运行时也要在编写java文件的文件夹cmd然后运行,不能切换到class文件所在位置运行。编译:javac -d . HelloWorld.javajavac 负责编译的命令-d 带包编译. 代表编译之后生成的东西放到当前目录下(.代表当前目录)HelloWorld.java 被编译的java文件运行:java 完整类名 —— java com.javase.day1206.HelloWorld注意:带包名描述的类名(完整类名) : java.util.Scanner不带包名描述的(简类名) : Scanner用idea时右键src新建包:com.javase.day1206生成包之后右键new class,然后取名,然后运行即可。5、关于import的使用: 两个类不在同一个包中的时候,其中一个类使用了另一个类,此时需要使用import(导包)import什么时候使用?A类中使用B类A类和B类都在同一个包下,不需要使用importA类和B类不在同一个包下,需要使用import注意:java.lang包下的类都不需要导包(但是这个包的子包需要导)。相当于:java.lang.*;在每个类中默认有。import怎么用?import语句只能出现在package语句之下,class声明语句之上import语句还可以采用*的方式.例:import com.javase.day1206.HelloWorld;可以使用:import com.javase.day1206.*;疑问: import com.javase.day1206.*; 这样是不是效率比较低?不是!编译器编译时会把*变为具体的类名。但是要注意:这里的*只代表某些类的名字。不要想着用 import Java *; 或import *; 把所有的类导入进来。这样是不现实的。
package com.javase.day1206;public class HelloWorld {public static void main(String[] args) {System.out.println("HelloWorld");}
}
-
同一个包中import可以省
package com.javase.day1206;public class Text01 {public static void main(String[] args) {//创建HelloWorld对象com.javase.day1206.HelloWorld hw = new com.javase.day1206.HelloWorld();System.out.println(hw);//com.javase.day1206.HelloWorld@1b6d3586//包名可以省略吗?//思考:这里的包名之所以可以省略,是因为这两个类在同一个包中。HelloWorld hw2 = new HelloWorld();System.out.println(hw2);//com.javase.day1206.HelloWorld@4554617c}
}
-
不同包的两个类,一个类中要使用另一个类中的东西,必须有import
package com;//import com.javase.day1206.HelloWorld;
//import还可以采用*的方式
import com.javase.day1206.*;public class Text02 {public static void main(String[] args) {/*HelloWorld hw = new HelloWorld();System.out.println(hw);没有导包之前,编译报错:Error:(6, 9) java: 找不到符号符号: 类 HelloWorld位置: 类 com.Text02原因:Text02在com包下,HelloWorld在com.javase.day1206包下不在同一个paceage下,包名不可以省略。*//*想要编译通过,必须这样:com.javase.day1206.HelloWorld hw = new com.javase.day1206.HelloWorld();System.out.println(hw);com.javase.day1206.HelloWorld hw2 = new com.javase.day1206.HelloWorld();System.out.println(hw2);com.javase.day1206.HelloWorld hw3 = new com.javase.day1206.HelloWorld();System.out.println(hw3);com.javase.day1206.HelloWorld@1b6d3586com.javase.day1206.HelloWorld@4554617ccom.javase.day1206.HelloWorld@74a14482*///虽然上面那样可以运行,但是每次这样写太麻烦了,所以这里就需要用到import 将需要用到的类导入进来。//import com.javase.day1206.HelloWorld;//包名.类名 就是带包的类的新名字。HelloWorld hw1 = new HelloWorld();System.out.println(hw1);}
}
-
解释之前接收键盘输入时使用的java.util.Scanner ,以及使用java.lang.下所有的类都不需要导
package com.javase.day1206;//第二种方法:使用import导包//import java.util.Scanner;
//也可以使用*的方式导包
import java.util.*;public class Text03 {public static void main(String[] args) {//为什么要这样写?//因为Text03与Scanner这两个类不在同一个包中,在Text03中使用Scanner类中的东西//第一种方法:需要在前面加Scanner类的包名:java.util//java.util.Scanner s = new java.util.Scanner(System.in);//导包之后使用时,类名前就不用加包名了。Scanner s = new Scanner(System.in);String str = s.next();System.out.println("您输入的字符串为:"+str);//String类为什么不需要导包就可以使用?//因为String类在java.lang包下,这个包下的所有类都不需要导包就可以使用!java.lang.String name = "张三";System.out.println("名字是:"+name);java.lang.String userName = "李四";System.out.println("用户名是:"+userName);}
}
访问控制权限
访问控制权限有几个,控制范围以及修饰什么?
1、访问控制权限有4个:public 公开的private 私有的protected 受保护的什么都不加 默认的2、访问控制权限各自的控制范围:public : 表示公开的,任何位置都可以访问private: 表示私有的,只能在本类中访问“默认” : 只能在本类、同包 访问protected : 本类、同包、子类中访问访问控制权限 本类 同包 子类 任意位置--------------------------------------------------------------------------public 可以 可以 可以 可以protected 可以 可以 可以 X默认 可以 可以 X Xprivate 可以 X X X默认范围从大到小排序:public > protected > 默认 > private3、访问控制权限符可以修饰什么?属性、方法 。 (四个都可以修饰)类、接口 。 (public 和 默认。其他的不能修饰)
本类的 访问控制权限符可以修饰什么东西
package com;public class User{//私有的private int id;//受保护的protected int age;//公开的public int weight;//什么都不加:默认的String name;//本类public static void main(String[] args) {User u = new User();System.out.println(u.id);System.out.println(u.age);System.out.println(u.weight);System.out.println(u.name);}//方法public void m1(){}private void m2(){}protected void m3(){}void m4(){}//静态的也可以,访问控制权限与是否静态无关public static void a(){}private static void b(){}protected static void c(){}static void d(){}
}//Error: 此处不允许使用修饰符private
//private class MyClass1{}//Error: 此处不允许使用修饰符protected
//protected class MyClass2{}
同包的
//同包
package com;public class Text1 {public static void main(String[] args) {User u = new User();//Error: id 在 User 中是 private 访问控制//System.out.println(u.id);System.out.println(u.age);System.out.println(u.weight);System.out.println(u.name);}
}
不同包中
//不同包中
package com.javase;import com.User;public class Text2 {public static void main(String[] args) {User u = new User();//Error: age 在 com.User 中是 protected 访问控制//System.out.println(u.age);//公开的,在哪里都可以使用System.out.println(u.weight);//Error: name在com.User中不是公共的; 无法从外部程序包中对其进行访问//System.out.println(u.name);}
}
子类中
//不同包,子类
package com.javase.day1206;import com.User;//User在com包下,Vip在com.javase.day1206包下,两个类不在同一个包下。
//但是Vip是User的子类。public class Vip extends User{public static void main(String[] args) {}//实例方法public void shopping(){//this表示当前对象//编译通过System.out.println(this.age);//Error: name在com.User中不是公共的; 无法从外部程序包中对其进行访问//System.out.println(this.name);}
}