Java的基本数据类型
1.byte :带符号8位变量;
2.char : 无符号16位变量;
3.short :有符号的16位整型变量;
4.int :有符号的32位整型变量;
5.long : 有符号的64位整型变量;
6.float :32位浮点型变量8位有效数字;
7.double :64位浮点型变量16位有效数字;
8.Boolean :布尔值有ture和false两种值;
面向对象的包装类
例如:Integer、Float、Double、array、String等; 可以继承
int和Integer比较相关问题链接
链接: [link]https://www.cnblogs.com/guodongdidi/p/6953217.html
数据类型的转换
Java不同数据类型之间的转换
自动转换
小转大自动转换
// 当a赋值给b是数据自动变成double型
Int a = 0;
Double b = a;
运算过程中的自动转换
byte–short–char–int–long–float–double由左到右等级升高。
运算过程中结果会转换为较高等级的变量类型。
在由Byte、Char、Short三者参与的运算中会自动转换为Int型,结果如赋值给三者中一个需强制类型转换。
强制转换
// 强制类型转换
float b = 29.99f//加f或F指定29.99位单精度浮点数
a = (Double)b
强制转换会造成数据的丢失,自动提升会提升精度
运算符
Java的算数双目运算符 +、-、*、/ 有括号先算括号和正常算数运算一样。
单目运算符++、–放在变量前先自加(减)后参与运算放变量后先参与运算后自加(减)。
三目运算符
条件表达式?表达式一:表达式二;条件为1结果为式1,条件为0结果为式二;
逻辑运算符
运算符 | 名称 | 运算方法 |
---|---|---|
& | 与 | 有假为假 |
I | 或 | 有真为真 |
^ | 异或 | 相异为真 |
! | 非 | 取反 |
&& | 短路与 | 优先左路左路假即为假右路忽略 |
II | 短路或 | 优先左路左路真即为真右路忽略 |
循环
- while循环
- do while中判断条件不能使用循环内定义的变量
//错误代码判断条件的i会报错无本地变量
public static void main(String[] args) {
do {
int i = 0;
System.out.println(i);
i++;
}while (i<10);
}
//正确代码
public static void main(String[] args) {
int i = 0;
do {
System.out.println(i);
i++;
}while (i<10);
}
- for循环
for(初始化;条件;增量表达式){}
初始化和增量表达式都可以不写或写在循环体内 - foreach循环遍历数组
//循环将数组中的元素给d
public static void main(String[] args) {
int arr[] = new int[10];
for (int d:arr) {
System.out.println(d);
}
- 循环中的关键字
关键字 | 作用 |
---|---|
break | 退出循环 |
continue | 结束本论循环继续下一轮循环 |
return | 退出循环并且直接退出方法,需指定返回值 |
数组
一维数组
- 特点:
- 单一变量:同一个数组只能储存一种变量类型
- 大量储存数据
- 储存结构空间连续方便查找
- 数组下标从0开始
- 数组申明
java数组在定义的同时赋初值int型初值为0 String型初值为null
//1 3为动态申明2为静态申明
int arr[] = new int[10];
int arr0[] ={1,2,3,4,5,6};
int[] arr1 = new int[10];
二维数组
- java的二维数组是不规则的相当于多个一维数组的组合
- 二维数组的申明
int arr1[][] = new int[10][10];
int arr2[][] = new int[10][];
int arr3[][] = {{1,2,3},{1,2},{1}};
int[][] arr4 = new int[10][10];
数组相关的函数
Arrays是数组的封装类封装了数组的填充、拷贝、复制、排序等算法。
- Arrays.toString(arr)将数组转换为字符串返回值是类型是字符串当二维数组时需要指定第一维的位置
- Arrays.copyOf(arr,3) 将数组的前三个元素拷贝返回值类型为数组
- Arrays.copyOfRange(arr,3,6) 拷贝指定位置的数组元素从3开始不算3拷贝到第六个元素
- Arrays.sort(arr) 对数组按升序排列
- arr.length能得到数组的长度,如果arr为二维数组其长度为一维数组的个数
字符串分割算法
String reg = "1,tom,job1|2,张小平,job2|3,王五,job3";
//定义有分割标志的字符串
String datas[] = reg.split("\\|");
for (int i = 0; i <datas.length; i++) {
String emps[] = datas[i].split("\\,");
for (int j = 0; j <emps.length; j++) {
System.out.println(emps[j]+"");
}
System.out.println("");
}
类
- 定义:类是具有相同特征和行为的抽象,对象是类的具体实例
- 类的构造函数
- 主要对类内的变量初始化
- 特点:
- 无返回值
- 构造方法与类名相同
- 每个类JVM都会分配默认的无参构造方法
- 如果有自定义的构造方法,则JVM的构造方法会被覆盖
- 方法的重载: 指的是方法名相同但参数不同的两个或者多个方法
- 根据对象申请空间使构造函数参数的不同调用的构造函数不同
- 成员变量:在类的方法外定义的变量叫成员变量能够被累的成员共享,成员变量存放在方法区生命周期取决于类的生命周期
- 局部变量:在方法内部声明的变量叫局部变量,存放在栈中生命周期随着方法的调用存在。
继承
- 子类通过extends关键字继承父类的代码
Java中所有的类都继承自Object类 - 继承小结
- 父类中的私有成员不会被子类继承
- 构造方法不能被继承
- 子类不能有多个父类但可以多层次的继承
- 父子类之间出现相同名称的变量子类变量和方法子类变量和方法覆盖父类称为重写
- 继承的理解
在生成类时如果该类有父类构造类时将依次向上递归到最顶层的父类开始依次向下构造切父类都保存格子的变量和方法,如果子类中未对父类的方法进行重写则父类直接将该方法和变量直接复制给子类,如果子类重写方法和变量则父类保留原来的方法和变量。父类的变量和方法会被隐藏。子类对父类已有的变量重写时,会出现两个名称相同的变量但调用父类方法使用父类的变量,调用子类方法使用子类变量,且子类构造时如没有使用super给父类有参构造函数传递参数子类会默认寻找父类无参的构造函数进行构造,如父类没有无参构造函数,会报错。 - 重写和重载的区别
- 重写
- 一般发生在父子类之间,子类定义与父类相同的变量或方法。
- 子类重写父类的成员变量或方法时,访问修饰符要高于父类。
- 子类要访问父类被重写的成员变量或成员方法时,只能通过super来调用
- 构造方法无法被重写
- 重载
- 发生在同一个类中,定义了相同名称的方法。
- 重载与方法中的参数类型和参数的个数有关,与返回值无关。
- 重载可以发生在同一类中的构造方法。
- 重写
- this和super关键字
this后跟本类中的方法或变量,调用本类的方法可以不带,但调用本类的变量时一般为了区分在方法中名字相同的局部变量在成员变量前带this。this特指本类中的变量。this还能在构造方法中调用其他的构造方法一实现对某一变量赋默认值。super是针对父类的方法和变量调用的关键字
//父类
String name = "父类"
public void prin(){
System.out.println("我是一个人我的名字是:"+name);
}
//子类
String name = "子类"
//不对prin方法重写
public static void main(String[] args) {
Chinese chinese = new Chinese();
chinese.prin();
}//结果:我是一个人我的名字是父类
//用this重写构造方法
public Chinese(int age){
this("zilei",age);
}
public Chinese(String name,int age){
this.name = name;
this.Age = age;
}
Static关键字
可以修饰成员变量,成员方法,也可以修饰类,也可以在类中单独开辟一片代码块执行
Static修饰的代码都会优先于非静态的变量和方法被初始化。
- Static的优先执行顺序:静态变量>静态代码块>静态方法>成员变量>成员方法
方法要在变量初始化后才能执行。
静态变量和静态代码块都放在对的静态代码区在被加载的时候被初始化 - Static在父子类中的执行顺序:父类静态变量>父类静态代码块>父类静态方法>子类静态变量>子类静态代码块>子类静态方法