package就是文件夹,将字节码(.class)进行分类存放 。包的注意事项:
编译:在D盘下有Person_Test.java ,在D盘下打开dos命令行执行 javac -d . Person_Test.java 命令就会生成一个D:/com/heima/Person_Test.class
运行:在D盘下打开dos命令行(当前路径下,不要跑到D:/com/heima去打开dos) 执行java com.heima.Person_Test
1)类的全路径名 变量名 = new 类的全路径名();
案例:一个java文件里面是Demo1_Package类
package com.heima;
• class Demo1_Package {
• public static void main(String[] args) {
• //Person p = new Person(); //报错:不同包下的类不能直接访问
• com.baidu.Person p = new com.baidu.Person(); //类的全路径名
• }
• }
• package com.baidu;
• class Person {
• String name;
• int age;
• }
2)package和class之间加入一个"import 包;"然后就可以直接访问不同包下的类了
案例:一个java文件里面是Demo2_Package类
• package com.heima;
• import com.baidu.Person; //导包
• class Demo2_Package {
• public static void main(String[] args) {
• Person p = new Person(); //导包后,就能直接访问了
• }
• }
• package com.baidu;
• class Person {
• String name;
• int age;
• }
类内部的类就叫做内部类
代码:
• class Demo1_InnerClass {
• public static void main(String[] args) {
//报错,因为内部类是写在其他类的内部 不能这样直接创建内部类的对象
• //Inner i = new Inner();
• //i.method();
//创建内部类对象格式:外部类名.内部类名 = 外部类对象.内部类对象
• Outer.Inner oi = new Outer().new Inner();
• oi.method();
• }
• }
• class Outer {
• private int num = 10;//外部类的私有属性
• class Inner {
• String name = "内部类";
• public void method() {
• System.out.println(num);//内部类访问外部类的内容, 直接访问包括私有
• }
• }
• public void show(){
• //System.out.println(name);//报错:外部类不能直接访问内部类的内容
• Inner i = new Inner();
//这样才是正确的,外部类访问内部类里面的内容,必须创建内部类的对象来访问
• System.out.println(i.name);
• }
• }
class Demo2_InnerClass {
• public static void main(String[] args) {
• //Outer.Inner oi = new Outer().new Inner();
//不能创建私有内部类的对象,因为内部类被私有了
• //oi.method();
• Outer o = new Outer();
• o.print();
• }
• }
• class Outer {
• private int num = 10;
• private class Inner {
//内部类私有是为了让内部的这个类更安全 比如:内部类就相当于人类的心脏
//怎么能让外面直接访问你的心脏呢?
• public void method() {
• System.out.println(num);
• }
• }
• public void print() {
• Inner i = new Inner();
• i.method();
• }
• }
class Demo1_InnerClass {
• public static void main(String[] args) {
• //外部类名.内部类名 对象名 = 外部类名.内部类对象;
• Outer.Inner oi = new Outer.Inner();
• oi.method();
• Outer.Inner2.print(); //直接访问静态内部类里面的静态方法
• }
• }
• class Outer {
• static class Inner { //静态成员内部类
• public void method() {
• System.out.println("method");
• }
• }
• static class Inner2 { //静态成员内部类
• public static void print() { //静态方法
• System.out.println("print");
• }
• }
• }
class Test_InnerClass {
• public static void main(String[] args) {
•
• Outer ot = new Outer();
• ot.num = ot.num - 5;
• Outer.Inner oi = ot.new Inner();
• oi.show();
• }
• }
• class Outer {
• public int num = 10;
• class Inner {
• public int num = 20;
• public void show() {
• int num = 30;
• System.out.println(num);//访问的是局部变量 30
• System.out.println(this.num);//访问的是成员变量 20
//外部类名.this访问的是当前外部类对象的num 5
//因为当前外部类对象ot的num值已经改变成了5 ot.num=ot.num-5
• System.out.println(Outer.this.num);
• System.out.println(new Outer().num);//一个新的外部类对象的num 10
• }
• }
• }
class Demo1_InnerClass {
• public static void main(String[] args) {
• Outer o = new Outer();
• o.method();
• }
• }
class Outer {
• public void method() {
• final int num = 10;
• class Inner {
• public void print() {
• System.out.println(num);
• }
• }
• Inner i = new Inner();//对象的生命周期比局部变量长,
• i.print();
• //当method()方法执行完毕后,i还存在着,就会导致如果i对象还想访问num,而
• //num已经消失了,访问不到了。所以在num前面加final 永远放到常量池里面去,常量池的
• //东西永远都不会消失(虚拟机挂掉才会消失)
• }
}
前提:有一个接口或者抽象类或者普通的类格式:
new 接口名或者抽象类名(){
重写方法;
};
本质:就是接口或者抽象类或者普通类的一个子类对象代码:
interface Inter{
public abstract void show();
}
class Demo {
public static void main(String[] args){
new Inter(){
public void show(){
System.out.println("hehe");
}
}.show();
}
}
interface Inter {
void show();
}
class Outer {
//补齐代码
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
今天学习了package和导包(import)之后是不是觉得编译步骤很复杂啊?下节我们将学习用Eclipse来编译运行程序。