java基础
浮点数据类型
浮点数据类型float,double不精确,最好不要使用浮点数进行比较,
而是使用java的类BigDecimal(银行业务一般使用)
浮点型float在后面需要加F
long类型在后面要加L
类型转换
高转低需要强制转换,如:
int a = 5;
byte b = (byte)a;
低转高不需要
两个不同类型数作运算,低容量会自动转换为高容量类型
变量类型
局部变量
在方法内,必须初始化
实例变量
在类中,方法外(不加static),如果不初始化,那么为默认值,如:0,null
布尔值默认为false
实例变量的调用:类名.变量名
类变量
加关键字static
直接调用
常量
加关键字final
static final double PI = 3.14;
final static double PI = 3.14;
final int a = 3;
快捷键
ctrl + d;复制当前行到下一行
位运算
位运算速度极快
异或 ^:
相同为0,不同为1
左移 <<:
*2
//计算2*8
2<<3 //左移一次乘以2,最终为16
右移 >>:
/2
字符串连接符
int a = 5;
int b = 6;
System.out.println(""+a+b);//结果为56
System.out.println(a+b+"");//结果为11
//两者结果不一样,""会将其之后的变量转换为字符串类型,在其之前的不变
javadoc命令
用于生成帮助文档
接收输入
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
System.out.println("输入:");
String str = scanner.nextLine();
System.out.println("输出为:"+str);
scanner.close();
//hasNext()和hasNextLine()用来判断是否有输入
Switch
java SE 7开始
Switch支持字符串类型(表达式->value)
switch(expretion){
case value1:
break;
case value2:
break;
default:
System.out.println();
}
//value必须是常量,不写break,会将后面的所有代码顺序执行
增强型FOR循环
int [] numbers={1,2,3,4,5};
for (int x:numbers){//每一次将number数组里的一个元素赋值给x
System.out.println(x);
}
数组工具类
Arrays,包含很多数组元素的操作,如:排序,找最大,最小值等
需import java.util.Arrays;
面向对象
本质:以类的方式组织代码,以对象的方式封装数据
面向对象最终还是会执行面向过程
静态方法
不需要实例化即可调用
有static修饰,同个包下其他模块可以直接调用,如Student.func()
静态方法是同类一起生成的,实例化方法(没有static修饰的方法)是在类实例化之后才生成
一个类中,
- 静态方法之间可以相互调用
- 非静态方法可以相互调用
- 静态方法里面不能直接调用非静态方法,因为两者加载时间不同
非静态方法
没有static修饰,需要new实例化类才能调用其中方法,如:
Student stu = new Student();
stu.func()
或者:
new Student().func();
三大特性
-
封装
重点用于属性,方法中用的比较少
public class Student{ private String name; private int age; public char sex; }
-
继承
extends关键字
public class Student extends Person{ }
继承之后子类可以使用所有父类的公有属性和公有方法,私有属性或私有方法只能通过父类的
get/set或类似的公有方法间接使用
另外私有属性其实可以用super.xxx调用,本质就是私有属性直接调用的话只能读不能写
方法被调用只会是写,所以私有方法是不能直接被调用,即使是使用super.xxx()调用
-
多态
值传递和引用传递
值传递
并未改变对象
引用传递
改变的是对象
异常
catch,try,throw,throws,finally
多层捕获,大范围的异常在下面
主动抛出异常,throw throws(用在方法上)
异常主要可以使程序继续运行
有参构造无参构造
- 和类名相同
- 没有返回值
可以使用快捷键alt+insert直接生成构造器
构造函数的本质
- 初始化值
- 使用new实例化类时,本质上是在调用构造器
- 当有参构造被定义时,如果想使用无参构造,无参构造必须显示定义(可以为空,如上图)
函数重载
函数重载其实就是
函数名字相同,形参不同,使用不同的参数调用相同的函数(方法)名,
从而使一个函数满足多种参数的需求
方法重写
-
必须要有继承关系
-
子类中的方法与父类同名且形参一摸一样
-
静态方法不存在重写,因为静态方法不需要实例化就可以使用,它是在类生成的时候就生成,所以不管怎么实例类,静态方法最终都是调用自己的类的那个静态方法
-
重写存在于非静态方法中,当实例化类之后,实例化的是哪个类,那么对象调用的方法就是那个类的方法,比如实例化子类,那么不管是对象类型是父类还是子类,调用的方法都是子类的方法
//test()为非静态方法时 A a = new A();//假设A是B的子类 B b = new A(); a.test(); b.test();//a.test和b.test中的test都是子类A中的test