二、数据类型
1. 基本数据类型
a | 类型 | 字节 | 范围 | 默认值 | 例子 |
---|---|---|---|---|---|
整数 | byte | 1 | (-128—127) | 0 | byte a = 100,byte b = -50 |
short | 2 | (-2^15—2^15-1) | 0 | short s = 10,short r = -20 | |
int | 4 | (-2^31—2^31-1) | 0 | int a = 10, int b = -20 | |
long | 8 | (-2^63—2^63-1) | 0L | long a = 10L,Long b = -20L | |
小数 | float | 4 | (-2^31—2^31-1) | 0.0f | float f1 = 234.5f |
double | 8 | (-2^63—2^63-1) | 0.0d | double d1 = 123.4 | |
字符 | char | 2 | (0—2^16-1) | ‘\u0000’ | char letter = ‘A’ |
布尔 | boolean | 1位 | {true,false} | false | boolean one = true |
注意:
1. Java使用16位的Unicode字符集
2. 转义序列符:\u
3.整数类型(byte/short/int/long)中,对于未声明数据类型的整形,其默认类型为int型。
4.在浮点类型(float/double)中,对于未声明数据类型的浮点型,默认为double型
5.如果没有初始化成员变量就开始使用,那么每个类型的成员变量都有一个默认的初始值
2. 引用类型——这类变量声明时不会分配内存,只是存储了一个内存地址
- 数组
- String
- 自定义的类或接口
注意:
1) 引用说的土一点就是变量名和变量值是分开的,比如说Student s = new Student(),s就是个引用类型的变量,s这个名分配在栈空间里,但是s它指向的值在堆空间里
2) 基本传值传参传的是副本,修改后原值不变;引用传值传参穿的是地址,修改后原值改变
3) “==”作用在引用数据类型间,判断内存地址是否相等,想判断内容实体用equals;
4) 所有引用类型的默认值都是null
5) 一个引用变量可以用来引用与任何与之兼容的类型
3. 枚举类型
4. 类型转换——整型、常量、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算
1)自动类型转换 (低——>高) byte,short,char—> int —> long—> float —> double
2)强制类型转换 (高——>低) 可能会损失精度,需要声明 int i1 = 123;byte b = (byte)i1
注意:
a. boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换)
b. byte型不能自动类型提升到char,char和short直接也不会发生自动类型提升(因为负数的问题)
c. 当进行数学运算时,数据类型会自动发生提升到运算符左右之较大者
d. 不能把对象类型转换成不相关类的对象
e. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
f. 强制转换的数据类型必须是兼容的
三、数组——Java 语言中提供的数组是用来存储固定大小的同类型元素
1. 基本用法
1)数组声明——java语言中声明数组时不能指定其长度(数组中元素的个数) int a[5]; //非法
type var[] type[] va(首选)
2)数组的创建——元素为引用数据类型的数组中的每一个元素都需要实例化
数组名 = new 数组元素类型[数组元素个数] int[] arr; arr = new int[5];
3)数组的初始化
a.静态初始化: int a[] = {1,2,3};
Date[] date = {new Date(2014,10,25), new Date(2014,10,26), new Date(2014,10,27)};
b.动态初始化: int[] arr = new int[3]; //数组定义
arr[0]=1; //数组初始化
arr[1]=2;
arr[2]=3;
4)每个数组都有一个(属性)lendth指明他的长度,例如:a.length的值为数组a的长度(元素个数)
2. Arrays工具类(见后续文章)
3. 二维数组
声明二维数组的时候可以只指定第一维大小,空缺出第二维大小,之后再指定不同长度的数组。 但是注意,第一维大小不能空缺(不能只指定列数不指定行数)四、流程控制
1.循环结构
1)分类
- while循环
- do…while循环 —— 至少会执行一次
- for循环、增强型for循环 for( 声明语句 : 表达式){}
2)相关关键字
- break —— 用来跳出整个语句块
- continue —— 让程序跳到下一次循环
2.分支结构
1)if…else
2) switch…case…default
a) witch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串类型了,同时 case 标签必须为字符串常量或字面量
b) switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号
c) case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量
d) 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句
e) 没有break语句,switch语句会一直执行下去
3.顺序结构(直接按代码一行一行执行)
五、方法
1.定义: 【访问修饰符】【修饰符】返回类型 方法名([参数列表])[异常声明]
2. 方法调用:
- 静态方法:类名.方法名(实参列表)
- 非静态方法:对象.方法名(实参列表)
3.特点
- 方法是解决一类问题的步骤的有序组合
- 当方法返回一个值的时候,方法调用通常被当做一个值
4.构造方法
- 1)所有对象创建时,都需要初始化才可以使用
- 2) 当一个对象被创建时候,构造方法用来初始化该对象。 构造方法和它所在类的名字相同,但构造方法没有返回值
- 3) 通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象
- 4) 所有的类都有构造方法,因为Java自动提供了一个默认构造方法,它把所有成员初始化为0
- 5) 一旦你定义了自己的构造方法,默认构造方法就会失效
- 6) super调用父类构造方法,this调用自己的构造方法,一般如果父类没有有参构造函数,子类会默认调用父类无参构造函数super(),如果父类有有参构造函数, 必须显示调用super(10);
7)属性、方法、构造方法和自由块都是类中的成员,在创建对象时,各成员的执行顺序如下:
(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(4)执行父类构造方法。
(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(6)执行子类构造方法。
8)构造方法只能由new运算符调用
9)构造代码块和构造函数的区别
(1)构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。 (2)构造函数:是给与之对应的对象进行初始化。它具有针对性。
5. 方法重写(Override)——外壳不变,核心重写
1)重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变
2)重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
3)重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常
例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出IOException 的子类异常
4) 参数列表、 返回类型,必须完全与被重写方法的相同
5) 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
6) 父类的成员方法只能被它的子类重写
7) 声明为final的方法不能被重写
8) 声明为static的方法不能被重写,但是能够被再次声明
9) 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法
10)子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
11)构造方法不能被重写
12) 如果不能继承一个方法,则不能重写这个方法
6. 方法重载(Overlode)—— 只需要方法名相同
1)重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同
2)每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表, 最常用的地方就是构造器的重载
3)被重载的方法必须改变参数列表(参数个数或类型或顺序不一样)
4)被重载的方法可以改变返回类型, 改变访问修饰符
5)被重载的方法可以声明新的或更广的检查异常
6)方法能够在同一个类中或者在一个子类中被重载
7)无法以返回值类型作为重载函数的区分标准
参考网址
注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。
ps : 有错误的还望各位大佬指正,小弟不胜感激