包
图片中的package不用自己写idea会自动给我们生成,package后面跟的就是包名。
路径名.路径名.xxx.xxx
// 例如:com.itheima.oa
-
包名一般是公司域名的倒写。例如:黑马是www.itheima.com,包名就可以定义成com.itheima.技术名称。
-
包名必须用”.“连接。
-
包名的每个路径名必须是一个合法的标识符,而且不能是Java的关键字。
在使用类的时候其实完整的写法是要写包名的,但是我们前面都在同一个包下面引用类,所以不写也没事,接下来我们看看引用其他包的类的什么样的格式。
第一张图是放给大家看的引用其他类的标准写法,第二张图才是我们要学习的导包用import进行导包,就是包名加类名 。
上面的图是介绍了什么场景下用导包
我们主要介绍一下最后一种情况
用不同包下的相同类怎么办?
假设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();
总结
final
学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。
如果有一个方法我不想别人去改写里面内容,该怎么办呢?
Java提供了final
关键字,表示修饰的内容不可变。
-
final: 不可改变,最终的含义。可以用于修饰类、方法和变量。
-
类:被修饰的类,不能被继承。
-
方法:被修饰的方法,不能被重写。
-
变量:被修饰的变量,有且仅能被赋值一次。
-
修饰类
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修饰的,目的就是供我们使用,而不让我们所以改变其内容。
修饰方法
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");
}
}
修饰变量-局部变量
局部变量——基本类型
基本类型的局部变量,被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");
}
}
修饰变量-成员变量
成员变量涉及到初始化的问题,初始化方式有显示初始化和构造方法初始化,只能选择其中一个:
-
显示初始化(在定义成员变量的时候立马赋值)(常用);
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修饰的常量名称,一般都有书写规范,所有字母都**大写**。
修饰变量-引用数据类型
引用数据类型只要不改变地址值就可以。
public static void main(String[] args) {
final int []arr = {1,2,3,4};
System.out.println(arr[2]);
arr[2] = 0;
System.out.println(arr[2]);
}
结果
权限修饰符
在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,我们之前已经学习过了public 和 private,接下来我们研究一下protected和默认修饰符的作用。
-
public:公共的,所有地方都可以访问。
-
protected:本类 ,本包,其他包中的子类都可以访问。
-
默认(没有修饰符):本类 ,本包可以访问。
注意:默认是空着不写,不是default
-
private:私有的,当前类可以访问。
public > protected > 默认 > private
不同权限的访问能力
public | protected | 默认 | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中的类 | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包中的无关类 | √ |
代码块
代码块这块知识点了解一下就可以了,并不是很重要。有可以写在方法里面的局部代码块种,写在类里面方法外的构造代码块,还有一个写在类里面的static修饰的静态代码块
局部代码块
局部代码的作用是节省内存 ,让你的代码使用完就释放。
构造代码
从上面两个图片可以看出来构造代码块就是把方法里面重复的方法抽取出来放到构造代码块里面,
然后再类调用的时候一定会先执行构造代码块里面的内容。
这个听着是不是很有用啊,但是有一个弊端就是要是有一个方法不需要这个构造代码块里面的内容怎么办,那就没办法啦,所以这个现在也不经常用。
静态代码块
是写在类里面的,用static修饰的代码块,它是随着类的加载而加载,而且只会执行一次。这个和构造代码块的运行顺序是一样的只是静态代码块就只执行一次