仅记录关键点,与前端JavaScript相同或相似的结构内容不记录
知识要点--数据类型
1.java是典型静态语言,数组是静态的,初始化之后长度不可变(js是可变的),数组变量是引用类型的变量
2.数组初始化分为静态初始化和动态初始化,两种方法都决定了数组的长度
package study;
public class ArrayTest {
public static void main (String[] args){
//采用静态初始化方式初始化第一个数组
String[] books = new String[]{
"demo1",
"demo2",
"demo3"
};
//采用静态初始化的简化形式初始化第二个数组
String[] names = {
"demo1",
"demo2",
"demo3"
};
//采用动态初始化的语法初始化第三个数组
String[] strArr = new String[5];
}
}
3.数组元素类型是整数类型(byte,short,int,long),初始值为0;
数组元素类型是浮点类型(float,double),初始值为0.0;
数组元素类型是字符类型(char),初始值为'\u0000';
数组元素类型是布尔类型(boolean),初始值为false;
数组元素类型是引用类型(类,接口和数组),初始值为null
4.基本数据类型
基本数据类型
5.整型默认为int,浮点默认为double,定义long或者float类型时
//多位数字可以使用下划线分隔(java7)
//错误,仍当做int,double类型处理
long num = 9999_9999_9999_9999;
float num1 = 1.002;
//正确
long num = 9999_9999_9999_9999L;
float num1 = 1.002F;
6.无穷大
- 正无穷:Double.POSITIVE_INFINITY / Float.POSITIVE_INFINITY
- 负无穷:Double.NEGATIVE_INFINITY / Float.NEGATIVE_INFINITY
Float类和Double类的无穷相等
7.布尔型:boolean类型的值只有true或false,其他数据类型的值不能转换成boolean类型(js可以,!!变量)
//使用boolean类型与字符串进行运算,boolean值会转换成字符串
String str = true + "";
//输出字符串true
System.out.print(str);
7.自动类型转换
-
系统支持把某种基本类型的值直接赋给另一种基本类型的变量
自动类型转换图 图1
//正确
byte a = 6;
short b = a;
//错误,byte不能自动类型转换为char
//char c = a;
- 任意基本类型与字符串运算都会自动类型转换为字符串
//下面试错误的,5是一个整数,不能直接赋给一个字符串
//String str1 = 5;
//可以用空字符串拼接使之成为字符串
String str2 = 3.5f + "";
8.强制类型转换(缩小转换)
- 格式:(targetType)value
//容易造成溢出导致数据丢失
int iValue = 233;
//强制转换为byte类型(发生了溢出)
byte bValue = (byte)iValue;
//输出-23
System.out.print(bValue);
//强制把double转int
double a = 3.98;
int b = (int)a;
//输出3(截断小数部分)
System.out.println(b);
-
int向byte强制类型转换
int类型233转换byte发生溢出 - 字符串转为基本类型可通过包装类实现
String a = "45";
//使用Integer方法转换成int
int iValue = Integer.parseInt(a);
9.表达式类型自动提升
当一个算术表达式包含多个类型的值时,整个算术表达式的数据类型将发生自动提升
- 所有byte类型,short类型和char类型将被提升为int类型
- 整个算术表达式的数据类型自动提升到表达式中最高类型操作数同样的数据类型,等级排列如图1
10.赋值运算符'='
//可以连续赋值,但是可读性很差,不推荐
int a,b,c;
a = b = c = 7;
11.位运算符(一般操作整数类型的变量或者值)
- & 按位与
- | 按位或
- ~ 按位非
- ^ 按位异或
- << 左移运算符
- >> 右移运算符
-
>>> 无符号右移运算符
按位与和按位或运算过程
左移运算将二进制码整体左移,右边补0,左边截断
右移运算分为>>和>>>,>>指二进制码右移后左边用符号位补充(正数为0负数为1),而>>>指左边总是用0补充
12.注意二进制码负数储存补码,补码为原码除符号位取反后加一
13.逻辑运算中短路或||与不短路或|
//下面例子a>4成立,短路或与不短路或区别在于是否运行后一个逻辑
int a = 5;
int b = 10;
//短路或||
if(a > 4 || b++ > 10){
//输出10
System.out.println(b);
}
//不短路或|
if(a > 4 | b++ > 10){
//输出11
System.out.println(b);
}
&与&&同理,&&中若左边逻辑false则不会运行右边逻辑
14.运算优先级(记不住慢慢来,多用就会了)
运算符优先级
知识要点--流程控制
1.Java 7增强后的switch分支语句
switch (expression){
case condition1:{
statement(s)
break;
}
case condition2:{
statement(s)
break;
}
default:{
statement(s)
}
}
2.break 使用标识符跳出(continue同理可以使用标识符)
public class BreakTest2{
public static void main(String[] args){
//外层循环,outer作为标识符
outer;
for(int i = 0 ; i < 5 ; i++ ){
//内层循环
for(int j = 0 ; j < 5 ; j++ ){
if( j == 1){
//跳出outer标识的循环
break outer;
}
}
}
}
}
3.foreach循环
for(type variableName : array | collection){
//variableName 自动迭代访问每个元素
}
//例子
for(String book : books){
System.out.println(book);
}
4.内存中的数组
- 数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素
- 实际的数组对象被存储在堆内存中,如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈内存中
- 当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁。因此,所有在方法中定义的局部变量都是放在栈内存中的;在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即便方法结束后,这个对象还可能被另一个引用变量所引用;只有当一个对象没有任何引用变量引用它时,系统的垃圾回收器才会在合适的时候回收它
- 为了让垃圾回收机制回收一个数组所占的内存空间,可以将该数组变量赋为null
5.Java 8增强的工具类:Arrays - int binarySearch(type[] a,type key):使用二分法查询key元素值在a数组中出现的索引,调用该方法时需要数组中元素按升序排列
- int binarySearch(type[] a,int fromIndex,int toIndex,type key):搜索a数组中fromIndex到toIndex索引的元素,要求升序排列
......
网友评论