黑马程序员全套Java教程_Java基础教程_修饰符(十八)

1、包

  • 包其实就是文件夹,其作用是对类进行分类管理
  • 包的定义格式:
    (1)格式:package 包名;(多级包用“.”分开)
    (2)范例:package.com.itheima;
  • 指定了包的java文件如何运行?(手动建包)
    如下,我们在文件夹中新建一个HelloWorld.java,通过控制台javac编译后,java命令执行可以正常运行输出语句。然后,我们在类的上面给它指定一个包package com.itheima;
package com.itheima;

public class HelloWorld{
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}

编译后执行,我们发现编译通过了,但是执行的时候报错“找不到或无法加载主类”,这是因为我们指定的包根本就不存在。怎么办呢?这时候我们就要创建包,如图,我们在HelloWorld.java目录下创建com文件夹,再在com文件夹里创建itheima文件夹。然后将HelloWorld.java目录下生成的HelloWorld.class文件剪切到itheima文件夹内,运行命令java com.itheima.HelloWorld,这才执行成功。
在这里插入图片描述

  • 指定了包的java文件如何运行?(自动建包)
    使用命令javac -d . HelloWorld.java编译,使用java com.itheima.HelloWorld运行。

2、导包的概述和使用

  • 使用不同包下的类时,要写类的全路径(如调用另一个cn.itcast包的Teacher类时,在对应的方法前要加前缀cn.itcast),这样太麻烦了为了简化带包的操作,Java就提供了导包的功能。
  • 导包的格式
    (1)格式:import 包名;
    (2)范例:import cn.itcast.Teacher

3、修饰符

3.1 修饰符的分类

  • 分为权限修饰符和状态修饰符。

3.2 权限修饰符

修饰符当前类同一个包中子类和无关类不同包的子类不同包的无关类
public
protected
默认(default)
private

注意:在protected修饰符中,若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法(即不可以通过new父类的方式访问,而是通过new子类或者this、super关键字访问)。

  • cn.itcast.Fu
public class Fu {
    private void show1(){
        System.out.println("private");
    }

    void show2(){
        System.out.println("默认");
    }

    protected void show3(){
        System.out.println("protected");
    }

    public void show4(){
        System.out.println("public");
    }

    public static void main(String[] args){
        //创建Fu的对象,测试看有哪些方法可以使用
        Fu fu = new Fu();
        fu.show1();
        fu.show2();
        fu.show3();
        fu.show4();
    }
}

cn.itcast.Zi

public class Zi extends Fu{

    public static void main(String[] args){
        //创建Fu的对象,测试看有哪些方法可以使用
        Zi zi = new Zi();
        zi.show2();
        zi.show3();
        zi.show4();
    }
}

cn.itcast.Demo

public class Demo {
    public static void main(String[] args) {
        Fu fu = new Fu();
        fu.show2();
        fu.show3();
        fu.show4();
    }
}

com.itheima.Zi

public class Zi extends Fu {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.show3();
        zi.show4();
    }
}

com.itheima.Demo

public class Demo {
    public static void main(String[] args) {
        Fu fu = new Fu();
        fu.show4(); 
    }
}

面试题:权限修饰符的考察

  • 在com.sunyard包下有A、B两个类,在com.sunyard.test包下有C类,三个类中都添加一个private修饰的testPrint()方法(注:假设三个类import都正确),以下描述正确的是()
public class A extends C {
    protected String a = "a";
}
public class B {
    String b = "b";
}
public class C {
    protected String c = "c"}
    private void testPrint(){
        System.out.println(new A().a);
        System.out.println(new B().b);
        System.out.println(new C().c);
    }
  • 编译错误。在A类中,可以通过new A().c访问到c的值,new C().c是访问不到的。

3.3 状态修饰符

  • 状态修饰符分别有两个,分别为final(最终态)和static(静态)
  • final关键字是最终的意思,可以修饰成员方法,成员变量和类,其特点:
    (1)修饰方法:表示该方法是最终方法,不能被重写
    (2)修饰变量:表示该变量是常量,不能再次被赋值
    (3)修饰类:表示该类是最终类,不能被继承。
  • final 修饰局部变量
    (1)变量是基本类型:final修饰指的是基本类型的数据值不能发生改变
    (2)变量是引用类型:final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。
  • static关键字是静态的意思,可以修饰成员方法和成员变量,其特点:
    (1)被类的所有对象共享,这也是我们判断是否使用静态关键字的条件。
    (2)可以通过类名调用,也可以通过对象名调用,但推荐使用类名调用
    (3)未经初始化的全局静态变量会被程序自动初始化为0。
  • static访问特点
    (1)非静态成员方法:能访问静态的成员变量和成员方法、能访问非静态的成员变量和成员方法。
    (2)静态的成员方法:能访问静态的成员变量和静态的成员方法。

面试题:输出的结果是什么?

public class Test {
    public int myMethod(){
        static int i = 0;
        return i++;
    }

    public static void main(String[] args) {
        System.out.println(new Test().myMethod());
    }
}
  • 编译失败。static关键字只能修饰成员方法和成员变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值