Java流程控制
scanner
Scanner s = new Scanner(System.in)
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据
next()不能得到带有空格的字符串
nextLine()可以获得带有空格的字符串
str.equals()判断字符串是否相等
str.length数组的长度
数组必须先声明再创建
dataType[] arrayRefVar;
dataType[] arrayRefVar=new dataType[arraySize]
nums[i]=k 赋值
面向对象
静态方法与非静态方法
静态方法可以直接调用
非静态方法必须实例化这个类
值传递和引用传递:
构造器详解
一个类即使什么也不写,也会存在一个构造方法
两个特点
- 必须和类的名字相同
- 必须没有返回类型,也不能写void
public class Demo04 {
public Demo04(){
}
}
构造器的应用(有参和无参)
Alt+insert:生成构造器
私有属性
private 修饰符声明,不可以直接调用
private String name;
//提供一些可以操作这个属性的方法
//get
public String getName(){
return this.name
}
//set给这个数据设置值
public void setName(String name){
this.name=name
}
这些方法可以通过alt+insert直接构造
继承
通过关键字extends
//学生 is 人
public class Student extends Person{
}
使用ctrl+H可以查看继承树
再Java中所有的类都默认直接或者间接继承Object类
Java是单继承,即一个儿子只有一个爸爸
私有的东西无法被继承
调用父类的构造器必须在子类的第一行,就算用子类新声明了一个对象,输出的也先是父类构造器,之后才是子类构造器
super详解
super注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super只能出现在子类的方法或者构造方法中!
- super和this不能同时调用构造方法
VS this:
代表的对象不同:this:本身调用者这个对象,super:代表父类对象的应用
前提:this:没有继承也可以使用,super:只有在继承条件下才可以使用
构造方法:this():本类的构造,super():父类的构造
方法重写
静态方法和非静态方法的区别很大!
静态方法:方法的调用只和左边的数据类型相关
非静态方法:重写只和非静态方法相关,去掉static定义
重写必须是public不能是static
重写:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大,比如private->public 但是逆向不可以
- 抛出的异常:范围可以缩小,但不能扩大
多态
多态注意事项
- 多态是方法的多态,和属性没有关系
- 父类和子类有联系,类型转换异常!ClassCastException!
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象!
Father f1=new son();
不能重写的情况
- static方法,属于类,它不属于实例
- final定义的
- private方法
instanceof用法
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
类型转换
- 父类引用指向子类的对象
- 把子类转换为父类,向上转型
- 把父类转换为子类,向下转型:强制转换
- 方便方法的调用,减少重复的代码!
Static关键字详解
注意观察执行顺序
抽象类
用abstract声明类和方法,抽象方法,只有方法名字,没有方法的实现。不能new抽象类,只能靠子类去实现它:约束
抽象类中可以写普通的方法
抽象方法必须在抽象类中
继承了抽象类的子类,都必须要实现它的方法
JAVA的类是单继承,但是接口是多继承的
抽象类存在构造器吗?:
抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法。示例代码如下:
package ahu;
abstract class Base{
int a=7;
public Base(){
a=8;
}
public Base(int i){
a=i;
}
}
public class Demo01 extends Base {
public Demo01(){
super();
}
public Demo01(int i){
super(i);
}
public static void main(String[] args) {
Demo01 demo=new Demo01();
System.out.println(demo.a);
Demo01 demo1=new Demo01(9);
System.out.println(demo1.a);
}
}
接口
接口中所有的定义其实都是抽象的,默认public abstract
作用:
- 约束
- 定义一些方法,让不同的人实现
- public abstract
- public static final
- 接口不能被实例化
- implements可以实现多个接口
- 必须要重写接口中的方法