一、Java的基本数据类型与数组
标识符与关键字
标识符
数字字母下划线美元符号组成
第一个字符不能是数字
不能是关键字
不能是true、false、null
基本数据类型
逻辑、整数、字符、浮点
逻辑
常量:true、false
变量:使用关键字boolean,可在声明时赋初值
boolean male=true
整数
int、byte、short、long
字符
最高位不是符号位
浮点
float:后边必须加f/F后缀,且保留八位有效数字
double:16位有效
输入输出
输入
Scanner是新增的一个类,使用该类创建一个对象,然后reader对象 调用方法,eg,nextBoolean()
注意,我们在写java时用Scanner则需要导入一个类来接受数据:
import java.util.Scanner;
Scanner reader=new Scanner(System.in);
输出
println(换行)、print(不换行)
注意:输出字符串常量时不可以出现回车,如果较长,可分为几部分,并用并置符号(+)连接。
数组
相同类型变量的集合,引用类型
创建数组:声明、分配变量
声明数组
Java不允许在声明数组中的括号内指定个数
//一维数组声明:
float boy[];
float []boy;
//二维数组声明:
char cat[][];
char [][]cat;
//一次多个:
int []a,b;
int a[],b[];
//注意以下两者等价:
int []a,b[];
int a[],b[][];
分配元素
数组名=new 数组类型[数组元素个数];
boy = new float[4];
声明数组和创建数组可以同时进行
float boy[]=new float[4];
构成二维数组的一维数组不必具有相同长度
注:与C不同的是,Java允许int变量的值指定数组元素个数
eg,
int size=30;
double number[]=new double[size];
length使用
数组长度就是数组元素个数
a.length...
数组初始化
数组创建后,系统赋默认值,float为0.0
数组引用
两个类型相同的数组,如果引用相同,则元素完全一致
注意:对于char型数组,不会输出数组引用,而是输出全部的值
如果想输出char型数组的引用,必须让数组b和字符串做并置运算
int a[]={1,2,3};
char b={'中','科','大'};
System.out.println("数组a的引用"+a);
System.out.println(b);//输出char型数组内容
System.out.println(""+b);//输出char型数组引用
对象数组
如果一个Student类有10个对象,下面的声明显然不合理:
Student stu1,stu2,stu3//.......
正确做法是使用数组对象,即数组的元素是对象
Student []stu;
stu=new Student[10];
但是需要注意的是,该数组每个元素都是一个Student对象,但这些对象目前是空对象,因此在使用数组stu中的对象之前,应创建数组所包含的对象,如,
stu[0]=new Student();
二、分支、循环
分支
//---1---if
if(boolean){
nr
}
if(){
nr
}
else{
nr
}
if(){
nr
}
else if(){
nr
}
...
else{
nr
}
//---2---switch
循环
for、while、do-while
遍历数组改进
//循环变量类型必须与数组类型相同
int a[]={1,2,3};
for(int i:a){
System.out.println(i);//循环变量i依次读取每一个元素的值
}
三、面向对象
封装、继承、多态(接口、重载)
封装
把共有属性和行为抽象出来成为一个概念类,类有具体的对象,如车这个类的一个具体对象为宝马车。一个对象将自己的数据和对这些数据的操作合理有效封装在一起。
封装用类(类把数据和对数据的操作封装成一个主体)来完成,类描述一类事物的共有属性和行为。属性通过变量来刻画,行为通过方法来体现。
继承
由继承得到的类是子类,被继承的类是父类(超类),子只能有一个父,不能用多个父亲哦
class 子类名 extends 父类名{//用关键字extends定义一个类的子类
...
}
子类继承性
1)子父类在一个包中的继承性
子类继承父类中不是private的成员变量和方法
2)子父类不在同一包中的继承性
子类不能继承private和友好访问权限的成员变量和方法,只继承protected、public
子类与对象
1)子类对象的特点
用子类构造方法创建一个子类对象时,子类中声明的成员变量被分配内存空间,其父类中的所有成员变量也被分配了空间,但是并不是父类所有的成员变量都能给子类使用(前文讲过啦--子类继承性)
2)instanceof运算符
java独有双目运算符,左边是对象,右边如果是左边对象的祖宗(该对象由祖宗创建),则返回true,else return false
成员变量隐藏、方法重写
1)隐藏成员变量
为啥会隐藏???因为子类声明了一个特殊的变量,它特殊在,父类有个同名的变量
特点~子类对象以及子类自己定义的方法操作与父类同名的成员变量是指子类重新声明的这个特殊的变量;
特点~子类对象用从父类中继承来的方法操作的是父类中被隐藏的成员变量。
注意:子类继承的方法只能操作它继承的成员变量以及被隐藏的成员变量,
子类新定义的方法只能操作继承的和自己声明的成员变量。
2)方法重写(方法覆盖)
子类通过重写可以隐藏已经继承的方法。
重写的要求:方法的名字、参数个数、参数类型必须与父类中的完全相同。
不允许降低访问权限,可以提高(public>protected>友好的>private)
如果子类可以继承父类的这个方法,那么就可以重写这个方法,把父类的状态和行为改变为自身的,然后该被改写的继承方法被隐藏。
重写方法可以继续操作继承的成员变量、调用继承的方法,也可以操作子类新声明的成员变量、调用新定义的其他方法,但无法操作被子类隐藏的成员变量和方法。
super
1)访问和调用被子类隐藏的成员变量和方法。
2)使用super调用父类的构造方法。
子类不继承父类的构造方法,只能用super调用父类构造方法
而且,super必须是子类构造方法中的头一条语句
final
final类不能被继承,即不能有子类;
final方法:如果不允许子类重写,就用final修饰父类中该方法;
如果成员变量或局部变量被修饰成final,那它就是常量,然后这个常量既然已经被final修饰,后期就不允许更改,不允许对它进行赋值操作,所以一开始就要给它一个初始值。
多态
多态性就是指父类的某个方法被其子类重写时,各自产生自己的行为功能。
重载
行为的多样性就是方法的重载
一个类中可以有多个方法重名,但是要保证这些方法参数不同(参数个数不同/参数个数同但对应某个参数类型不同)
四、接口
接口的定义和类的定义很像,接口声明、接口体,用关键字interface
接口体中包含常量的声明(没有变量)和抽象方法(没有普通方法)两部分,且接口体中所有常量的访问权限一定都是public,而且是static常量(允许省略public、final、static修饰符),所有抽象方法的访问权限一定都是public(允许省略public abstract)
接口的实现
1)类实现接口
java中,接口由类来实现以便使用接口中的方法。一个类需要在类声明中使用关键字implements声明该类实现一个或多个接口,eg,
class Dog extends Animal implements Eatable,Sleepable
2)重写接口中的方法
前面我们提到,接口中的方法一定是public abstract方法,所以类在重写接口方法时,要去掉abstract,给出方法体,而且方法的访问权限一定要用public修饰(不能降低访问权限,前边提到啦)
同理,一个类声明实现一个接口,但没有重写接口中的方法,那么这个类一定是抽象类。就是说,抽象类既可以重写接口中的方法,也可以直接拥有接口中的方法。
3)接口的细节说明
程序可以通过接口名直接访问接口中的常量,如果一个类实现了接口,那么该类可以直接在类体中使用该接口中的常量。
定义接口时,如果关键字interface前面加上了public关键字,就称这样的接口是一个public接口。public接口可以被任何一个类实现,如果一个接口不加public修饰,就称作友好接口,友好接口可以被同一包中的其他类实现。
如果父类实现了某接口,那么其子类也实现,就不必再显式地用implements声明实现这个接口。
接口也可以像方法一样被继承,用关键字extends。由于接口中的方法和常量都是public的,所以子接口将继承所有。
接口回调
意思是,可以把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法。实际上,当接口变量调用被类实现的接口方法时,就是通知相应的对象调用该方法。
注意,接口无法调用类中其他的非接口方法。