java 基础
null
不能打印,’’不能打印- 基本类型和引用类型
(String)
- 单精度浮点数
float
4
字节,双精度浮点数double
8
字节,用科学计数法存的,省空间 - 数据范围与字节数不一定相关。例如
float
- 浮点数默认
double
,想使用float
,用后缀F
- 整形默认
int
,使用long
,用后缀L
- 作用域:定义开始到,所属大括号结束
- 自动类型转换:数据范围从小到大
范围:float > long
- 强制类型转换:会发生数据溢出
(大 -> 小)
,精度损失(double -> int,不是四舍五入)
char
数学运算时转换为ASCII
码,char short byte
数学运算时首先会提升为int
boolean
不能发生数据类型转换0 -> 48
A -> 65
a -> 97
- 运算里面不同类型时,结果是数据范围大的那种
- 任何类型和
String
连都会变成String
- 复合赋值运算符隐含了一个强制类型转换:
byte num = 30;
num += 5;
/*
num = byte + int
num = int + int
num = (byte) int
*/
&&
和||
具有短路效果,如果左边可以判断出结果,右边不执行- 三目运算符冒号左右必须满足类型匹配
- 方法定义不能嵌套
- java 9
jshell
类似于python
的控制台, 退出/exit
- 对于
byte,short,char
,如果右边没有超过范围,那个javac
会默认隐含得进行强制类型转换
short a = 3;
short b = 5;
short result = a + b; //这是编译错误,因为short会提升为int
short result = 3 + 5; //这是对的,编译器会计算好值,然后强制转换,但如果有变量参与就不这样
case
后面数值不能重复,default
不一定放最后switch
后面类型:- 基本数据类型:
byte, short, char, int
- 引用数据类型:
String, Enum, Scanner
除了基本类型
- 基本数据类型:
- 方法不能嵌套
- 方法重载
- 相关因素:参数个数不同,类型不同,多类型顺序不同
- 无关因素:参数名称,返回值类型(可能会产生歧义),修饰符
- 静态初始化使用省略模式,就不能拆成两个步骤
int arrayD[];
arrayD = { 10, 20, 30 }; // 这样会报错
-
直接打印数组得到的是内存地址hash值.
-
动态数组初始化:整数默认为0,浮点类型默认0.0, 字符默认
\u0000
, 布尔默认为false
, 引用类型默认为null
-
Java
内存- 栈:方法中的局部变量。方法的运行在栈中。
- 堆:凡事new出来的东西都在堆当中。 堆内存里面的东西都有一个地址值。 堆内存里面的数据都有默认值。
- 方法区:存放
.class
相关信息,常量和静态变量(静态区),包含方法的信息。共享。 - 本地方法栈:
native
方法服务 - 程序计数器
-
int[] arrayB = arrayA
此时要是修改B,A也会被修改 -
数组new出来之后长度不变
-
数组作为参数时传递的是数组的地址值,返回值时返回的也是地址
-
同一包下用别的类可以不用导包
-
引用类型当参数时传的是地址,返回值时也是地址
-
局部变量没有默认值,方法内部。参数也是局部变量。在栈内存
-
成员变量有默认值,整个类可以使用。在堆内存。
-
封装:方法和
private
boolean的get 为 is -
Java Bean
- 所有成员变量都是
private
- 为每一成员变量编写一对
Getter
和Setter
- 编写一个与参数的构造方法
- 编写一个全参数的构造方法
- 所有成员变量都是
-
java.lang
不用导包 -
匿名对象,new出来后没有赋给左边,只能使用唯一的一次
-
random.nextInt(3);
左闭右开 -
ArrayList<E>
中的E只能是引用类型,不能是基本类型(想用的话就用包装类)ArrayList
打印的不是地址,是内容
-
自动拆箱,装箱
- 装箱:基本类型 --> 引用(包装)类型
- 拆箱:引用(包装)类型 --> 基本类型
-
==
- 基本类型比的数值
- 引用类型比的地址
-
所有字符串都是
String
实例对象- 内容永不可变(是常量)
- 可以共享使用
- 效果相当于
char[]
, 但底层实现为byte[]
- 双引号字符串,就在
字符串常量池(在堆当中)
,字符串常量池中的对象保存的是字节数组(堆中)的地址;而new出来的不在字符串常量池 - 推荐写
"abc".equals(str);
, 常量放前面 concat
拼接返回的是一个新的字符串,原来那个不变indexof(String str)
找到str在this里面第一次出现的位置- 字符串截取函数,左闭右开,返回新字符串
-
static
- 属于类,对象共享
- static 修饰方法是类方法(用类名称直接调用,对于本类可以省略类名称),其他是成员方法
- 静态不能直接访问非静态,成员可以访问静态(因为先有静态内容,后有非静态内容)
- 静态方法不能用
this
- 静态代码块:第一次到达本类时,唯一一次执行
- 静态内容总是先于非静态内容
MyClass obj = new MyClass(); obj.staticMethod(); //正确不推荐,javac会翻译为MyClass.staticMethod() MyClass.staticMethod(); // 推荐
Arrays
:toString