目录
一、数据类型扩展
A、整数扩展:进制 二进制以0b开头、十进制、八进制以0开头、十六进制以0x开头
int i = 10;//十进制
int i2 = 010;//八进制
int i3 = 0x10;//十六进制
B、浮点数扩展
float 的特点:有限、离散、舍入误差、大约值、接近但不等于
银行业务不使用float或者double,使用BigDecimal
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d);//输入是false
//====================================
float d1 = 22313131313131f;
float d2 = d1+1;
System.out.println(d1==d2);//输出是true
C、字符串扩展
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa == sb);//返回false
String sc = "hello world";
String sd = "hello world";
System.out.println(sc==sd);//输入true
二、变量作用域
A、类变量
被static修饰的变量
B、实例变量
位于类中 且在 方法块之外的变量,从属于对象(如果不初始化 ,初始值会变成这个类型的默认值)
C、局部变量
方法块里的变量为局部变量 ,必须要初始化。
三、常量
初始化后不能再改变值,不会变的值。必须被final关键字修饰。
四、运算符
算数运算符:+、-、*、/、%、++、--
赋值运算符:=
关系运算符:>、<、>=、<=、==、!=、instanceof
逻辑运算符:&&、||、!
以下了解即可
位运算符:&、|、^、~、>>、<<、>>>
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~B = 1111 0010
条件运算符:?:
扩展赋值运算符:+=、-=、*=、/=
五、用户交互Scanner
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
String s = scanner.nextLine();//可以输出一句完整的话,无论是否含有空格
System.out.println("输出的内容为:" + s);
scanner.close();
================================
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
String s = scanner.next();//如果含有空格,只可以输出空格前面的话
System.out.println("输出的内容为:" + s);
scanner.close();
================================
Scanner scanner = new Scanner(System.in);
double sum = 0;
int m = 0;
while (scanner.hasNextDouble()) {
double nextDouble = scanner.nextDouble();
m++;
sum = sum + nextDouble;
System.out.println("你输入了第" + m + "个数据,然后当前结果sum=" + sum);
}
System.out.println(m + "个数的和为" + sum);
System.out.println(m + "个数的平均值是" + (sum / m));
scanner.close();
六、循环结构
A、while循环
只有满足条件才会执行循环体
B、do...while循环
至少会执行一次,如果满足条件会继续执行
C、for循环
循环体执行之前,循环次数就已经确定
快捷键:100.for
九九 乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (i * j) + "\t");
}
System.out.println();
}
D、增强for循环
int[] numbers ={1,2,3,4,5};
for(int x : numbers){
System.out.println(x);
}
七、Java流程控制break、continue
A、break:用于跳出循环
B、continue:用于跳过某次循环
八、方法重载
重载就是在一个类中,有相同的函数名称,但形参不同的函数。
方法的重载规则:
*方法名称必须相同
*参数列表必须不同
*方法的返回类型可以相同也可以不同
*仅仅返回类型不同不足以成为方法的重载
九、可变参数
可变参数只能在最后一个参数的位置
public class Demo01 {
public static void main(String[] args) {
addNum(1,1,8,0,2,3,4,5,6,7);
}
private static void addNum(int a, int... b) {
for (int i : b) {
System.out.println(i);
}
}
}
十、递归
自己调用自己
递归结构包括两部分:
- 递归结束的条件:什么时候不调用自身方法,如果没有头,将陷入死循环。
- 递归体:什么时候需要调用自身方法
示例:实现 n!
public class Demo01 {
public static void main(String[] args) {
Demo01 demo01 = new Demo01();
System.out.println(demo01.f(3));
}
private int f(int num) {
if (num == 1) {
return 1;
} else {
return num * f(num - 1);
}
}
}
十一、面向对象(OOP)
三大特性:封装、继承、多态
A、封装
应禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来访问(即属性私有,get/set)
封装的意义:
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 增加系统可维护性
B、继承
Super注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
Super VS this
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
前提:
this:没有继承也可以使用
super:只能在继承条件下才可以使用
构造方法:
this():本类的构造
super():父类的构造
C、多态
定义:同一个方法可以根据发送对象的不同而采用多种不同的行为方式
多态是方法的多态,属性没有多态
方法不能重写的情况:static方法、final方法、private方法
多态存在的条件:
- 有继承关系
- 子类重写父类的方法
- 父类引用 指向子类对象
十二、static关键字
public class Application {
public static void main(String[] args) {
Student student = new Student();
System.out.println("===============");
Student student2 = new Student();
}
}
public class Student {
{
System.out.println("匿名代码块");
}
static {
System.out.println("静态代码块");
}
public Student() {
System.out.println("构造方法");
}
}
执行顺序:
静态代码块
匿名代码块
构造方法
===============
匿名代码块
构造方法
十三、抽象类
A、抽象类不能被实例化,只能被继承
B、抽象类中可以写普通方法
C、抽象方法必须写在抽象类中
十四、接口Interface
接口中只有协议,没有具体实现。
public interface UserService{
//接口中定义的属性默认修饰符:public static final
int AGE = 99;
//接口中定义的方法默认修饰符:public abstract
void add();
}
十五、内部类
A、成员内部类
B、静态内部类
C、局部内部类
D、匿名内部类
new Person().eat();//其中new Person() 是没有名字的,所以叫做匿名内部类
十六、Error和Exception
Error一般是JVM抛出的,通常是灾难性的致命错误,是程序无法控制和处理的。(当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程。)
Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的处理这些异常。
#Exception
try、catch、finally、throw、throws
throw:用于方法块内部抛出异常
public void test(int a, int b) {
if (b == 0) {
throw new ArithmeticException("b不能为0");//该异常为运行时异常,如果是编译时异常则必须向方法调用者抛出异常
}
}
throws:用于方法向外部抛出异常
public void test(int a, int b) throws Exception {
if (b == 0) {
throw new Exception("b不能为0");//该异常不能内部自己捕获,则需要向方法调用者抛出异常
}
}
整理中......