第一章 包
1.1 包
包在操作系统中其实就是一个文件夹。包是用来分门别类的治理技术,不同的技术类放在不同的包下,方便管理和保护。
在 IDEA 我的项目中,建包的操作如下:
包名的命名标准:
路径名. 路径名.xxx.xxx
// 例如:com.itheima.oa
- 包名个别是公司域名的倒写。例如:黑马是 www.itheima.com, 包名就能够定义成 com.itheima. 技术名称。
- 包名必须用”.“连贯。
- 包名的每个路径名必须是一个非法的标识符,而且不能是 Java 的关键字。
1.2 导包
什么时候须要导包?
状况一:在应用 Java 中提供的非核心包中的类时
状况二:应用本人写的其余包中的类时
什么时候不须要导包?
状况一:在应用 Java 外围包(java.lang)中的类时
状况二:在应用本人写的同一个包中的类时
1.3 应用不同包下的雷同类怎么办?
假如 demo1 和 demo2 中都有一个 Student 该如何应用?
代码示例:
// 应用全类名的模式即可。// 全类名:包名 + 类名
// 拷贝全类名的快捷键:选中类名 crtl + shift + alt + c 或者用鼠标点 copy,再点击 copy Reference
com.itheima.homework.demo1.Student s1 = new com.itheima.homework.demo1.Student();
com.itheima.homework.demo2.Student s2 = new com.itheima.homework.demo2.Student();
第二章 权限修饰符
2.1 权限修饰符
在 Java 中提供了四种拜访权限,应用不同的拜访权限修饰符润饰时,被润饰的内容会有不同的拜访权限,咱们之前曾经学习过了 public 和 private,接下来咱们钻研一下 protected 和默认修饰符的作用。
- public:公共的,所有中央都能够拜访。
- protected:本类,本包,其余包中的子类都能够拜访。
-
默认(没有修饰符):本类,本包能够拜访。
留神:默认是空着不写,不是 default
- private:公有的,以后类能够拜访。
public > protected > 默认 > private
2.2 不同权限的拜访能力
public | protected | 默认 | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中的类 | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包中的无关类 | √ |
可见,public 具备最大权限。private 则是最小权限。
编写代码时,如果没有非凡的思考,倡议这样应用权限:
- 成员变量应用
private
,暗藏细节。 - 构造方法应用
public
,不便创建对象。 - 成员办法应用
public
,不便调用办法。
小贴士:不加权限修饰符,就是默认权限
第三章 final 关键字
3.1 概述
学习了继承后,咱们晓得,子类能够在父类的根底上改写父类内容,比方,办法重写。
如果有一个办法我不想他人去改写外面内容,该怎么办呢?
Java 提供了final
关键字,示意润饰的内容不可变。
-
final:不可扭转,最终的含意。能够用于润饰类、办法和变量。
- 类:被润饰的类,不能被继承。
- 办法:被润饰的办法,不能被重写。
- 变量:被润饰的变量,有且仅能被赋值一次。
3.2 应用形式
3.2.1 润饰类
final 润饰的类,不能被继承。
格局如下:
final class 类名 {}
代码:
final class Fu {
}
// class Zi extends Fu {} // 报错, 不能继承 final 的类
查问 API 发现像 public final class String
、public final class Math
、public final class Scanner
等,很多咱们学习过的类,都是被 final 润饰的,目标就是供咱们应用,而不让咱们所以扭转其内容。
3.2.2 润饰办法
final 润饰的办法,不能被重写。
格局如下:
修饰符 final 返回值类型 办法名(参数列表){// 办法体}
代码:
class Fu2 {final public void show1() {System.out.println("Fu2 show1");
}
public void show2() {System.out.println("Fu2 show2");
}
}
class Zi2 extends Fu2 {
// @Override
// public void show1() {// System.out.println("Zi2 show1");
// }
@Override
public void show2() {System.out.println("Zi2 show2");
}
}
3.2.3 润饰变量 - 局部变量
- 局部变量——根本类型
根本类型的局部变量,被 final 润饰后,只能赋值一次,不能再更改。代码如下:
public class FinalDemo1 {public static void main(String[] args) {
// 申明变量,应用 final 润饰
final int a;
// 第一次赋值
a = 10;
// 第二次赋值
a = 20; // 报错, 不可从新赋值
// 申明变量,间接赋值,应用 final 润饰
final int b = 10;
// 第二次赋值
b = 20; // 报错, 不可从新赋值
}
}
思考,上面两种写法,哪种能够通过编译?
写法 1:
final int c = 0;
for (int i = 0; i < 10; i++) {
c = i;
System.out.println(c);
}
写法 2:
for (int i = 0; i < 10; i++) {
final int c = i;
System.out.println(c);
}
依据 final
的定义,写法 1 报错!写法 2,为什么通过编译呢?因为每次循环,都是一次新的变量 c。这也是大家须要留神的中央。
3.2.4 润饰变量 - 成员变量
成员变量波及到初始化的问题,初始化形式有显示初始化和构造方法初始化,只能抉择其中一个:
- 显示初始化(在定义成员变量的时候立马赋值)(罕用);
public class Student {final int num = 10;}
-
构造方法初始化(在构造方法中赋值一次)(不罕用,理解即可)。
留神:每个构造方法中都要赋值一次!
public class Student {
final int num = 10;
final int num2;
public Student() {
this.num2 = 20;
// this.num2 = 20;
}
public Student(String name) {
this.num2 = 20;
// this.num2 = 20;
}
}
被 final 润饰的常量名称,个别都有书写标准,所有字母都 大写。