Java中的注释有三种:
- 单行注释 : //注释内容
- 多行注释 : /* 注释内容 */
- 文档注释 : /** 注释内容 */
标识符
- 只能以字符、美元符、下划线开头
- 标识符大小写敏感
数据类型
基本数据类型(primitive type):byte、short、int、long、float、double、char、boolean
引用类型(reference type):类、接口、数组
银行业务怎么表示?
float :有限 离散 舍入误差 大约 接近但不等于
最好不要使用浮点数进行比较
我们使用BigDecimal 数学工具类
所有的字符本质上还是数字
如:a=97
中=20013
数值类型之间的运算,如果有long类型,则运算结果为long类型,没有long类型,其余任意类型运算都为int类型。
变量
实例变量如果不初始化,它会带有默认值,布尔值默认值为false,除了基本类型,其余的默认值都是null.
变量的命名规范
左移和右移
“<<” 相当于乘2
“>>” 相当于除2
字符串连接符
当加号一段有字符串类型的时候,会自动转换为字符串类型
当 int a=10;
int b=20;
上述第一句结果为1020
但第二句结果为30
因为它先算a+b然后再与空运算符相加
包机制
一般利用公司域名倒置作为包名。
javaDoc
生成自己的Java API
Scanner
方法
return 除了返回值,还有终止方法的作用:return0;
方法的重载
上述就定义了一个可变参数,输入参数的个数是可变的。
递归
主要学习递归思想,在实战中尽量不要使用递归,因为我们是用栈存储递归,会压积很多函数,直到递归头运行完才会释放其他的函数。会占用大量的内存空间,一般只使用递归次数非常少的程序。
分析Java中的内存
for each 能够很方便的遍历数组 ,但此方法没有下标,不能操作具体的元素。
冒泡排序
public static int[] sort(int[] array){
int temp=0;
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-1-i;j++){
if(array[j+1]<array[j]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}
时间复杂度为O(n的平方)
构造器
也就是构造方法,一个类中即使什么都不也,也会存在一个构造函数。
构造函数必须与类名相同,没有返回值。
使用new关键字,本质就是在调用构造器
构造器一般用在初始化值
super
可以通过super关键字来调用父类的方法和属性。
-
super调用父类的构造方法,必须在写在构造方法的第一行
-
super必须只能出现在子类的方法和构造方法中
-
super和this不能同时调用构造方法
this没有继承也可以使用
super只能在继承条件才可以使用
方法重写
需要有继承关系才有重写,子类重写父类的方法。
- 方法名必须相同
- 参数列表必须相同
- 修饰符范围可以扩大但不能缩小
- 抛出的异常可以缩小但不能扩大
多态
父类的引用指向子类
如Sudent继承Person,可以有Person s=new Student();
对象能执行哪些方法,主要看对象左边的类型。
- 多态是方法的多态
- 父类和子类,有联系 类型转换异常 ClassCastException
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象
instanceof(类型转换)
引用类型,判断一个对象是什么类型,可以判断两个类是否存在父子关系
static
- 修饰变量时,为静态的变量,可以直接使用类名.变量来直接调用
- 修饰方法时,为静态方法。静态方法可以直接调用静态方法,不能调用非静态方法。 非静态方法可以直接调用静态和非静态方法。
- static{ }为静态代码块,静态代码块为最先执行且只执行一次
抽象类
用关键字abstract修饰
- 抽象类中的抽象方法没有方法体
- 抽象类的所有方法,继承于它的子类都必须实现它的方法
- 不能new抽象类,只能靠子类去实现它。
- 抽象方法必须写在抽象类中,但抽象中既可以有抽象方法又可以有普通方法
接口
只有规范
- 实现了接口的类就必须重写接口中的方法
- 接口中所定义的方法都是抽象的 public abstract
- 接口不能被实例化