基础
1.变量
理解为对存储数据的操作,需要指明类型和变量名,使用前需要初始化
2.基本类型
分为:整数(byte,short,int,long)
浮点(float,double)
Char
Boolean
2.1Int:正负21亿左右;相除是舍弃尾数;结果过大会溢出,正变负,负变正;0X开头是16进制,0开头是8进制。
2.2Long:大小-2e(64-1)~~2e(63-1)
-1;直接赋值需要在值后面加上l;计算大数据在后
2.3Double和float:默认小数为double;double是float的两倍,所以叫double;十进制对于1/10表示会有误差,所以需要精确计算需要BigDecimal;
2.4Char:实际为一个非负正数;
2.5Boolean:只有true和false;
2.6基本类型间的转换:
整数直接量可以直接复制给byte, short,
char ,他们参与运算直接转换为int类型。
基本类型的转换: 隐式(从小到大)强制(从大到小)
隐式的:多种类型之间运算时,自动从小的类型转换为大的类型;
byte,char,short运算时都先转换为int类型再运算
强制转换:(需要转换的类型)变量 有可能精度损失或则溢出
3.运算符号
3.1运算符号:%(取模),++,--(放在前面是先自增,放在后面是使用后在自增)
3.2关系符:<,
>, >=, <=, ==, != , &&(第一个为false就不再计算), !, ||(第一个为true就不再计算)。
3.3赋值运算符:” =”将右边的值赋值给左边。在前面加上其他运算符则为扩展运算符如:+=,-=等,其运算效率比较高;
3.4+:除了运算可以实现字符串连接;快速赋值为字符串,其他类型连接:+“”;
3.5条件(三木)运算:boolean表达式?表达式1:表达式2。计算boolean表达式,为true则结果是表达式1,是false则结果是表达式2条件运算符可以嵌套使用String r =
a > 0 ? "正数" : (a == 0 ?
"0":"负数");
注意:浮点计算不能用double二进制无法准确的表示1/10
计算后的类型转换:byte b2 =
(byte)(b1+b2);不能写成:byte b2 =(byte)b1+b2;
4.条件选择
4.1任何复杂的逻辑顺序都可以通过顺序,分支,循环三种基本的程序结构实现
4.2分支
4.2.1If;
4.2.2if
else;
4.2.3switch
1.7之前是只能整型,之后是可以string和char
swith() {
case整型常量值1: 语句1; 不加break会穿透(根据考虑使用);
……
default:语句n;
}
switch的本意是符合就执行所有后面语句代码;
4.3循环
4.3.1While ( Boolean ){语句}和do {语句}while ( Boolean ) ;在于是否必须要执行执行语句;
4.3.2For: for(循环变量初始状态1 ;循环条件2 ;循环条件的改变3 ){}
计算表达式1的值,通常为循环变量赋初值;
计算表达式2(表达式2为逻辑表达式)的值,即判断循环条件是否为真,若值为真则执行循环体一次(语句块),否则跳出循环;
执行循环体;
计算表达式3的值,此处通常写更新循环变量的赋值表达式;如此循环往复,直到表达式2的值为false。
for语句通常用于解决固定次数循环的处理,它的三个参数都可以设置为空,但是“;”号不能少,表达式1,和表达式3都可以设置多个语句用“,”分开。直到……这样的语句是,优先选择do-while语句来实现;
4.3.3break和continue
1.break用于循环和switch表示跳出循环执行后面的语句。break只能跳出一层循环。
2.continue只能用于循环表示跳出此次循环体中剩余的语句执行下次循环。
5.集合
5.1数组:为相同元素的集合,按线性顺序排列,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素(“一个跟一个”),可以通过元素所在位置的顺序号(下标)做标识访问每一个元素(下标从0开始,最大到元素个数-1),数组创建后长度不可改变。
5.1.1申明
数组类型[]数组名= new数据类型[大小];
确切数据类型:用于分配空间;数组名:用于后面引用;new用于创建数组,需要指定大小,数组大小指定后不可变;
5.1.2初始化:
基本类型在数组创建后会被赋予初始值,0;0.0;false等;
手动赋值:int [ ] arr = { 10,23,30,-10,21 } ;这种写法只适合与声明的时候,声明之后再这样赋值是不可以的。int[] arr;arr = new int[]{10,23,30,-10,21 };声明之后的写法;
注意:new之后的[]中不可以写长度,而元素的个数就是数组的长度。
5.1.3数组的复制
1. System.arraycopy(Object src,int srcPso, Object src, int srcPso,int length)
参数的意义:源数组,起始位置,目标数组,目标数组中的起始位置,长度
2. Arrays.copyOf(数组的引用,int newLength)返回值为一个数组,多出的长度用默认值补齐。
5.1.4数组的排序:Arrays.sort();
5.1.5数组的排序:Arrays.toString()可以打印数组;
6.类
6.1引用
6.1.1除了8种基本类型的变量外其他都是引用类型的变量;
6.1.2引用:使用new的时候创建,Object obj = new Object();创建引用obj,new后面的是调用的类的构造方法;还可以通过赋值的方式创建:Object obj = object;此时创建引用obj,但是他和object指向同一个对象;
6.2方法:方法名和参数列表一个类中不可能有两个方法签名相同的方法
6.2.1构造方法与类同名,没有返回值类型有访问修饰符;
构造方法常常给成员变量初始化
造方法在创建对象时被自动调用的
JAVA语法规定,任何一个类都必须含有构造方法,假如源程序中没有定义,则编译器在编译时将为其添加一个无参的空构造方法,当类定义了构造方法后,Java编译器将不再添加默认的构造方法
构造方法可以重载
6.2.2方法重载:方法名相同,但是方法参数不一样;
重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如:父类的一个方法申明了一个检查异常IOException,但是在重写这个方法的时候不能抛出Exception异常,因为Exception是IOException的父类,只能抛出IOException的子类异常。
参数列表必须完全与被重写方法的相同;
返回类型必须完全与被重写方法的返回类型相同;
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
父类的成员方法只能被它的子类重写。
声明为final的方法不能被重写。
声明为static的方法不能被重写,但是能够被再次声明。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
构造方法不能被重写。
如果不能继承一个方法,则不能重写这个方法
Super关键字的使用
当需要在子类中调用父类的被重写方法时,要使用super关键字。
6.2.3方法重写
重载(overloading)是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
只能重载构造函数
重载规则
被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。
6.2.4重写与重载之间的区别
区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)
6.2.5总结
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载是一类中多态性的一种表现。