学习狂神说Java整理一些关于Java基础的琐碎知识
Java运算
float型数据后面要加上F
long型后面要加上L
byte short char 做运算其结果为int型
^为异或,如A=“0011” B=“0101” C=“A^B”,则C=“0110” 相同为零,不同为1
2<<3=16
‘<<’ 相当于 *2
‘>>’ 相当于 /2
当运算前面有字符串,则+变为字符串连接符,其后的运算不会执行
注释开发
JavaDoc
@author 指明开发该类模块的作者
@since 指明最早需要使用的jdk版本
@version 指明该类模块的版本
@see 参考转向,也就是相关主题
@param 说明方法中的参数
@return 说明方法返回值
@throws 说明方法可能抛出的异常
使用idea生成JavaDoc文档,详情可参阅
链接: 使用idea 生成Javadoc文档
for的增强型 适用于JDK1.5之后的版本
for(数据类型 变量名 : 数组或者集合){
程序名
}
int [] arr={1,2,3,4,5};
for(int i :arr){
System.out.println(i);
}
作用:遍历数组(将数组arr中的元素依次赋值给i,然后对i进行输出,如果对i进行修改,并不会影响arr中的值)
缺点: 没有索引,不能对容器里面的元素修改
流程控制的小知识
idea也是一个反编译工具,可以将编译好的class文件直接放入idea中进行查看编译后的代码。
while与do…while在条件满足时其输出结果相同,只有在条件不满足时才会有不同的输出结果
关于方法
方法可以存于类中,也可以存于类中的对象中。
传值的为实参,接受参数的为形参
方法重载:方法名相同但是传递的参数类型不同,程序会根据传递的参数类型不同加载不同的方法
如何使用命令行传递参数:(主类也可以传递参数)
命令行传参
可变参数:可以看作是定义了一个数组
递归
递归包含两个部分:函数体以及约束条件,即递归头以及递归体
对于数据庞大的计算,不要使用递归。
作业,一个简易计算器
提示:使用switch,还有其他方法,多想想。
链接
数组
定义:int[] nums= new int[10]
即:数组类型[] 变量名 = new 数组类型[数组长度]
数组的初始化:
静态初始化:定义之后就赋值了。如int[] nums = {1,2,3,4}
动态初始化:定义之后再赋值,如int[] nums= new int[10];int[0]=1,int[1]=1……
数组的默认初始化:在数组定义之后其实便已经赋值好了,数字默认为0,字符串默认为null。
数组的类
则a中第二个到第四个元素将都被0覆盖
冒泡排序的优化
自己写的冒泡排序法,可以正常输出,记录一下(j=a.length-i-1更好)
面向对象的编程
构造体
有参和无参构造
new关键字是在使用他的时候定义的,其本质就是调用构造器并产生新的空间
如Person zhangsan = new Person();
这时就可以使用他了。
若只使用有参构造,那无参构造空着不写就好,但是要有。
我觉得有参构造就是在变量会发生变化的时候用的,比如前台给后台传递的值,而无参构造就是发出的是固定的值的时候使用的比如弹窗。有参会更常用些。
封装
当使用封装一个类时,将使用private,私有变量,外部不能使用和调用这个变量。
封装的优点:
1.提高程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口(都是使用get和set)
4.系统可维护性增加了
继承
在Java中所有的类都默认继承Java类
在Java中只有单继承,没有多继承;即,一个子类只能继承一个父类,一个父类可以被多个子类继承。
System.out.println(super.属性名) 可以调用父类的属性值
或者直接super.方法名(),调用父类的属性值
重写
1.重写只跟非静态的方法有关,跟静态的方法没有关系。
2.子类继承了父类的方法,然后子类就可以重写父类的方法(方法名要一致)。
3.参数列表必须相同
4.修饰符:范围可以扩大但不能缩小;(public>protected>defult>private)
5.抛出的异常范围可以缩小,但是不能扩大(ClassNotFoundException --> Exception(大))
为什么重写?
父类的功能子类不一定需要或者不一定满足。
使用方法:Alt + Insert:Override;
多态
2中类型转换只有父类和子类中有的方法才可以转换。
instanceof
X instanceof Y
会判断二者是否有父子关系,如果有就编译通过,没有会报错;然后会看X指向的实际类型是否为Y的子类型,如果是,则结果为true,否,结果为false。
类型转换
存在条件:父类引用指向子类对象
例:Person person = new Student();
这里的Person 就是Student的父类,反过来是不成立的。
如果是子类转父类可以直接转(子类转父类可能会丢失一些方法),但是如果是父类转子类就需要强制类型转换了。
格式:(子类名)变量名.调用的子类的值();
static
如果类中有静态变量/方法,即用static定义的变量
可以使用(类名.变量名)直接调用,也建议这样使用
静态变量在类加载时就执行,比非静态的类更早存在
而且只执行一次。
可以使用import static 来静态导入包
{} 只有大括号而没有名字的叫匿名代码块,在静态变量之后执行,在构造方法之前执行。可以用来给变量赋初试值使用。
被final修饰之后将无法被继承,即没有子类了。
实例是什么?
实例是指new出来的一个对象,他在内存中有确定的储存空间
abstract类
抽象方法,只有方法名,没有方法的实现。实现他的方法都交给他的子类去实现。
抽象类不能new,只能靠子类去继承实现他。
抽象方法只能存在于抽象类里面,但是抽象类里面可以有普通的方法。
接口:约束和实现分离
Java的类只能单继承,但是Java的接口可以多继承。