1、IDEA
1.1、IDEA概述和安装
1.1.1、IDEA概述
- IDEA全称IntelliJ IDEA,是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具。
- 集成环境:把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。
1.1.2、IDEA安装
- 参考官网
1.2、IDEA的使用
1.2.1、IDEA启动配置
1.2.2、IDEA中编写HelloWorld
- 创建一个空项目(JavaSE_Code)
- 创建一个新模块(idea_test)
- 在idea_test模块下的src下创建一个包(com.gues)
- 在com.gues包下新建一个类(HelloWorld)
- 在HelloWorld类中编写代码
- 在idea中执行程序
1.3、IDEA中项目结构
1.4、IDEA中内容辅助键和快捷键
1.4.1、内容辅助键
- 快速生成语句
- 快速生成main()方法:
psvm + Enter
- 快速生成输出语句:
sout + Enter
- 快速生成main()方法:
- 内容辅助键
Ctrl + Alt + space
(内容提示,代码补全等)
1.4.2、快捷键
- 注释
- 单行:选中代码,
Ctrl + /
,再来一次,就是取消 - 多行:选中代码,
Ctrl + Shift + /
,再来一次,就是取消
- 单行:选中代码,
- 格式化
Ctrl + Alt + L
- 生成构造器等
alt + insert
- 查看一个类的层级关系
ctrl + H
- 将光标放在一个方法上,
ctrl + B
, 可以定位到方法
1.5、IDEA中模块操作
1.5.1、新建模块
1.5.2、删除模块
1.5.3、导入模块
2、包
2.1、包的概述和使用
- 包:其实就是文件夹
- 作用
- 对类进行分类管理
- 区分相同名字的类
- 控制访问范围
- 包的定义格式
- 格式:
package 包名;
(多级包用.分开)- 范例:
package com.gues;
- 范例:
- 格式:
2.2、包的命名
- 包的命名规则
- 只能包含数字、字母、下划线、小圆点,但不能用数字开头,不能是关键字或保留字
- 包的命名规范
- 一般是小写字母 + 小圆点(com.公司名.项目名.业务模块名)
- 范例:com.gues.crm.user //用户模块
- 一般是小写字母 + 小圆点(com.公司名.项目名.业务模块名)
2.3、常用的包
- 一个包下包含很多的类,java中常用的包有:
java.lang.*
:lang包是基本包,默认引入,不需要再引入java.util.*
:util包是系统提供的工具包,工具类,使用 Scannerjava.net.*
:网络包,网络开发java.awt.*
:是做java的界面开发,GUI
2.4、导包
- 使用不同包下的类时,使用的时候要写类的全路径,写起来太麻烦了为了简化带包的操作,Java就提供了导包的功能
- 导包的格式:
import 包名;
3、修饰符
3.1、访问修饰符
- java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):
- 公开级别:用 public 修饰,对外公开
- 受保护级别:用 protected 修饰,对子类和同一个包中的类公开
- 默认级别:没有修饰符号,向同一个包的类公开
- 私有级别:用 private 修饰,只有类本身可以访问,不对外公开
访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | × |
默认 | 没有修饰符 | √ | √ | × | × |
私有 | private | √ | × | × | × |
- 使用的注意事项
- 修饰符可以用来修饰类中的属性,成员方法以及类
- 只有 默认的 和 public 才能修饰类,并且遵循上述访问权限的特点
- 成员方法的访问规则和属性完全一样
3.2、状态修饰符
3.2.1、final
final
关键字是最终的童思,可以修饰成员方法、成员变量、类- final修饰的特点:
- 修饰
方法
: 表明该方法是最终方法,不能被重写
- 修饰
变量
: 表明该变量是常量,不能再次被赋值
- 修饰
类
: 表明该类是最终类,不能被继承
- 修饰
3.2.2、final 修饰局部变量
- 变量是
基本类型
:final 修饰指的是基本类型的数据值不能
发生改变
- 变量是
引用类型
:final 修饰指的是引用类型的地址值不能
发生改变
,但是地址里面的内容是可以发生改变的
3.2.3、static
static
关键字是静态的意思,可以修饰成员方法,成员变量- static修饰的特点
- 被类的所有对象共享,这也是我们判断是否使用静态关键字的条件
- 可以通过类名调用 当然,也可以通过对象名调用
3.2.4、static 访问特点
- 非静态的成员方法
- 能访问静态的成员变量
- 能访问非静态的成员变量
- 能访问静态的成员方法
- 能访问非静态的成员方法
- 静态的成员方法
- 能访问静态的成员变量
- 能访问静态的成员方法
- 总结成一句话就是:
静态成员方法只能访问静态成员
4、封装
4.1、封装的概述
- 封装就是把抽象出的数据(
属性
)和对数据的操作(方法
)封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(方法
),才能对数据进行操作
4.2、封装的好处
- 隐藏实现细节
- 可以对数据进行验证,保证安全合理
4.3、封装的实现步骤
- 将属性私有化
private
(让外部不能直接修改属性) - 提供一个公共的
set方法
,用于对属性判断并赋值
public void setXxx(类型 参数名){// Xxx表示某个属性
//加入数据验证的业务逻辑
属性 = 参数名;
}
- 提供一个公共的
get方法
,用于获取
属性的值
public XX getXxx(){ //权限判断,Xxx 某个属性
return xx;
}
5、继承
5.1、继承概述
- 继承可以解决代码复用,让我们的编程更加靠近人类思维。当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过
extends
来声明继承父类即可
5.2、继承的示意图
5.3、继承的基本语法
class 子类 extends 父类{
}
- 子类会自动拥有父类定义的属性和方法
- 父类又叫 超类,基类
- 子类又叫派生类
5.4、继承给编程带来的便利
- 代码的复用性提高了(多个类相司的成员可以放到同一个类中)
- 代码的扩展性和维护性提高了(如果方法的代码需要修改,修改一处即可)
5.5、继承的注意事项
-
子类继承了所有的属性和方法,
非私有的属性和方法可以在子类直接访问
,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问 -
子类必须调用父类的构造器,完成父类的初始化
-
当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用
super
去指定父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过 -
如果希望指定去调用父类的某个构造器,则显示的调用一下:
super(参数列表)
-
super()
在使用时,必须放在构造器第一行(super()只能在构造器中使用
) -
super()
和this()
都只能放在构造器第一行,因此这两个方法不能共存在一个构造器 -
java所有类都是Object类的子类,Object是所有类的基类
-
父类构造器的调用不限于直接父类,将一直往上追溯到Object类(顶级父类)
-
子类最多只能继承一个父类(指直接继承),即
java中是单继承机制
-
不能滥用继承,子类和父类之间必须满足
is a
的逻辑关系(我有两个类A和B,如果他们满足A是B的一种,或者B是A的一种,就说明他们存在继承关系,这个时候就可以考虑使用继承来体现,否则就不能滥用继承)
5.6、super关键字
-
super
关键字的用法和this
关键字的用法相似this
:代表本类对象的引用super
:代表父类存储空间的标识(可以理解为父类对象引用)
关键字 访问成员变量 访问构造方法 访问成员方法 this this.成员变量
访问本类成员变量this(...)
访问本类构造方法this.成员方法(...)
访问本类成员方法super super.成员变量
访问父类成员变量super(...)
访问父类构造方法super.成员方法(...)
访问父类成员方法
5.7、方法重写 / 覆盖
- 方法重写概述
- 子类中出现了和父类中一模一样的方法声明(即子类中有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法)
- 方法重写的应用
- 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能。又定义了子类特有的内容
override
- 是一个注解
- 可以帮助我们检查重写方法的方法声明的正确性
5.7.1、方法重写的注意事项
- 方法重写也叫方法覆盖,需要满足下面的条件:
- 子类方法的形参列表,方法名称,要和父类方法的形参列表,方法名称完全一样
- 子类方法的返回类型和父类方法返回类型一样,或者父类是父类返回类型的子类
- 子类方法不能缩小父类方法的访问权限(public > protected > 默认 > private)
- 私有方法不能被重写(父类私有成员子类是不能继承的)
5.7.2、方法重写和重载的比较
名称 | 发生范围 | 方法名 | 形参列表 | 返回类型 | 修饰符 |
---|---|---|---|---|---|
重载(overload) | 本类 | 必须一样 | 类型,个数,或者顺序至少有一个不同 | 无要求 | 无要求 |
重写(override) | 父子类 | 必须一样 | 相同 | 子类重写的方法,返回的类型和父类返回的类型一致,或者是其子类 | 子类方法不能缩小父类方法的访问范围 |
6、多态
6.1、多态概述
- 同一个对象,在不同时刻表现出来的不同形态
- 举例: 猫
- 我们可以说猫是猫:
猫 cat = new 猫();
- 我们也可以说猫是动物:
动物 animal = new 猫();
- 这里猫在不同的时刻表现出来了不同的形态,这就是多态
- 我们可以说猫是猫:
- 举例: 猫
- 多态的前提和体现
- 有继承/实现关系
- 有方法重写
- 有父类引用指向子类对象
6.2、多态中成员访问特点
- 成员
变量
:编译
看“=”左
边,执行
看“=”左
边 - 成员
方法
:编译
看“=”左
边,执行
看“=”右
边 - 为什么成员变量和成员方法的访问不一样呢?
- 因为成员方法有重写,而成员变量没有
6.3、多态的好处与弊端
- 多态的好处:提高了程序的扩展性
- 具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
- 多态的弊端:不能使用子类的特有功能
6.4、多态中的转型
- 向上转型
- 本质:父类的引用指向了子类对象
- 语法:
父类类型 引用名 = new 子类类型();
- 特点:
- 编译类型看左边,运行类型看右边
- 可以调用父类中的所有成员(需遵守访问权限)
- 不能调用子类中特有成员
- 最终运行效果看子类的具体实现
- 向下转型
- 语法:
子类类型 引用名 = (子类类型) 父类引用;
- 只能强转父类的引用,不能强转父类的对象
- 要求父类的引用必须指向的是当前目标类型的对象
- 当向下转型后,可以调用子类类型中所有的成员
- 语法:
7、断点调试(debug)
7.1、断点调试概述
- 断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下,进行分析从而找到这个Bug。
- 断点调试时程序员必须掌握的技能
- 断点调试也能帮助我们查看java底层源代码的执行过程,提高程序员的Java水平
7.2、断点调试的快捷键
- F7(跳入)
- F8(跳过)
- shift+F8(跳出)
- F9(resume,执行到下一个断点)
- F7:跳入方法内
- F8:逐行执行代码
- shift+F8:跳出方法