查看class文件
idea里查看
Project Strecture -->Modules-->+Add Contert Root-->out目录-->OK
Scanner
-
Scanner scanner = new Scanner(System.in ); //记得关闭 scanner.close();
结构
顺序结构
选择结构
-
if单选择
-
if双选择 if else
-
if多选择if else if
-
switch
-
case会穿透 要用break防止穿透
-
循环结构
-
while 循环 条件不满足不进入循环
-
for循环 最有效最灵活的循环结构
-
do while 循环 先循环后判断
-
增强for循环 主要用来遍历数组和集合
反编译
idea就可以实现、
将class文件粘贴到idea
break continue goto
-
break: 终止循环
-
continue:不执行本次循环的操作 继续下一次的循环
方法
本意为功能块
最好一个方法只完成一个功能
return:返回结果 终止方法
规则
-
方法名称必须相同a
-
方法返回值类型可以相同 也可以不同
-
仅仅返回类型不同不足以成为方法的重载
命令行参数
可变参数
-
正方法声明中,在指定参数类型后加一个省略号(...)
-
一个方法只能指定一个可变参数,他必须是方法的最后一个参数,任何普通的参数都必须在它之前声明
递归
递归头:什么时候不调用自己
递归尾:什么时候需要调用自己
数组
相同类型数据的有序结合
-
定义方式 数组类型[] 数组名称
int[] num;//声明数组、
num=new int[10]//创建一个数组
int[] num=new int[10];
-
静态初始化 创建加赋值
-
动态初始化 包含默认初始化
-
特点
-
长度确定 一旦被创建 大小不可以改变
-
元素必须是相同类型
-
元素可以是任何类型 包括基础类型和引用类型
-
数组变量属于引用类型,数组就是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象java中对象在堆中,因此数组对象本身是在堆里面的
-
-
ArrayIndexOutOfBoundsException数组下标越界异常
-
多维数组
int [] [] array = new int[10] [10]
数组嵌套数组
例如int[] [] array = {{1,2},{2,3},{3,4}.{4,5}};
array[0] [0] =1
array[0] [1] =2
array[2] [0] =3
Arrays类
常见方法
-
给数组赋值 fill
-
给数组排序 sort
-
比较数组 equals
-
查找数组元素 binarySearch
稀疏数组
java内存
-
堆
-
存放new 的对象数组
-
可以被所有线程共享,不会存放别的对象引用
-
-
栈
-
存放变量类型 包含这个基本类型的具体数据
-
引用对象的变量 会存放这个引用在堆里面的具体地址
-
-
方法区
-
可以被所有的线程共享
-
包含了所有的class和static变量
-
面向对象
-
本质:以类的方式组织代码,以对象的组织(封装)对象
-
抽象
-
特性
封装 把数据包装
继承
多态
-
调用非静态方法 先实例化new 对象 再.方法名 因为非静态方法在类实例化之后才存在
-
static静态方法 和类一起加载 类存在它就存在了 调用类.方法名
-
类和对象的关系
类是一种抽象的数据类型,它是对某一类事物整体描述、定义,但是并不能代表某一事物
对象是抽象概念的具体实例
使用new关键字创建对象
除了分配内存空间外,还会给创建好的对象,进行默认的初始化。
本质是调用构造器
构造器
类中的构造器也称构造方法,实在进行创建对象的时候必须调用的
-
必须和类的名字相同
-
必须没有返回类型
一旦有了有参构造 无参构造也必须存在!!
封装
高内聚 低耦合
属性私有 get/set
将数据属性隐藏起来 ,避免直接访问,需要通过接口方法来进行操作
作用
提高程序安全性,保护数据
隐藏代码的实现细节
统一接口
系统可维护增加了
继承
-
本质是对某一批类的抽象
-
extends java只有单继承,没有多继承
-
ctrl+H 会出来继承树
-
所有类 ,都默认直接或间接继承object
-
私有的无法被继承
super
-
super 调用父类的构造方法,必须在构造方法的第一个
-
super必须只能出现在子类的方法或者构造方法中
-
super this 不能同时调用构造方法
-
无参构造函数默认先调用父类,再调用子类
super this区别
-
代表对象不同
this:本身调用者这个对象
super:代表父类对象的应用
-
前提
this:没有继承也可以使用
super:只能在继承条件才可以使用
-
构造方法
this():本类的构造
super():父类的构造
方法的重写
-
父类的引用指向了子类 例如 Students 继承Person Person s1 = new Students()
父类型可以指向子类,但不能调用子类独有的方法
-
非静态方法才可以重写
-
子类重写了父类的方法 引用时执行子类
-
注意:
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大但不能缩小:public>Protected>Default>private
-
抛出的异常:范围可以被缩小,但不能扩大ClassNotFoundException-->Exception(大)
-
-
为什么要重写
-
父类的功能子类不一定需要或不满足
-
Alt+Insert : override
-
-
是的
多态
-
对象能执行哪些方法,主要看左边的类型
-
多态就是同一方法可以根据发送对象的不同而采取多种不同的行为方式。
-
注意
-
只有方法有多态,属性没有
-
父类子类之间才能转换,否则会显示类型转换异常ClassCastException
-
-
存在条件:继承关系,方法需要重写,父类引用子类的对象
-
子类转为父类,向上转型,不用强制转换,可能会丢失一些子类的方法 例子 Person person = new Student();
-
父类转为子类,向下转型,强制转换
instanceof
判断两个类之间是否存在父子关系
static
-
类的静态方法只执行一次
-
静态导入包
abstract
-
约束方法 带abstract的方法可以不用实现 可以由该类的子类实现 若子类也为抽象类则由子子类实现
-
抽象类不能new 只能靠子类(extends)实现它
-
抽象类中可以写普通方法 抽象方法必须在抽象类中
-
节省开发 提高开发效率
-
单继承
接口 普通类 抽象类
-
普通类只有具体实现
-
抽象类具体实现和(抽象方法)都有!
-
接口:只有规范!自己无法写方法~专业的约束!约束和实现分离:面向接口编程~
接口
-
接口是多继承的, 接口实现类可以实现很多个接口(implements)
-
接口中所有定义方法都是抽象的,所有方法只能定义,不能实现。具体方阿飞内容实现写在接口实现类
-
实现接口的类,必须实现接口的所有方法
接口的作用
-
约束
-
定义一些方法,让不同的人实现
-
public abstract (方法)
-
public static final (常量)
-
接口不能被实例化 接口中没有构造方法
-
可以实现多搁接口 必须重写接口中的方法
内部类
成员内部类
-
在类的内部再定义一个类
-
内部类可以调用大类的方法,和私有属性
静态内部类
不能访问非静态的属性
匿名内部类
一个java类中可以有多个class类,但是只能有一个public class
不用将实例保存到变量中 直接new 不用建一个变量存放new出来的新东西
局部内部类
在类的方法内部定义类
异常Exception
分类
-
运行时异常 是可能被程序员避免的异常 与检查性异常相反,该异常可以在被编译时忽略
-
检查性异常 程序员无法预见的,最具代表的是用户错误或问题引起的异常,在编译时不能被简单地忽略
-
错误
异常处理机制(Ctrl+Alt +T)
-
try{//监控区域}
catch( a ){//如果出现了异常a则处理catch代码块里面的内容 }
finally{//无论是否有异常 finally内部的代码块都会被执行}
-
可以不用finally 但是必须有try catch
-
若要捕获多个异常,必须从小到大进行捕获
-
假设方法中,处理不了这个异常,就在方法上抛出异常 throw throws
自定义异常
自定义一个类继承exception