本文主要介绍了JavaSE基础知识中表较重要的概念、语法、和重要知识点,包含许多JavaSE中容易混淆、忽视、难以理解的点,具体相关知识参看此博客目录!
JavaSE基础
1.易忽视知识点
易忽视概念
- 同一个作用域下变量名不能相同
- java中定义局部变量必须进行初始化,定义全局变量可以
不
进行初始化处理- 堆里面产生的成员变量才会有默认值(new出来的对象所带的成员变量),局部变量没有默认值
- JavaScript 中boolean 可以转化为其他类型,java中boolean
不
可以转化为其他类型- System.out.print(输出的内容); 输出内容后不换行,
不
可以没有输出的内容- java保留小数位输出,String.format(“%.nf”,d); //表示保留
n
位小数- 变量:一般经历三个步骤,声明、赋值、使用
- switch的条件变量只能是
八种数据类型加字符串
(switch可以用于判断字符串是否相等)- 小数据与大数据一起参与运算,结果为大数据的类型(自动提升)
- 强制类型转换语法:小数据类型 变量名 = (小数据类型) 值或大数据类型变量名
- 三目运算符:条件表达式?值1:值2;(当条件表达式值为true,取值1,为false取值2)
- 数组的作用:一次存储多个数据
- 方法的作用:包装一段代码,使其方便使用,提高代码的复用性,降低代码的耦合度
- 随机数获取: Random random=new Random(); int ran=random.nextInt(30)+20;
- 一个java文件中只能有一个公共类(public class)
- 如果系统中没有构造函数,系统中会自动构建一个无参的构造函数,如果一个类中有构造函数系统将不会创建任何构造函数
1.java语言优点
安全
:原因:先编译再执行跨平台
:原因:因为java程序最终实在jvm (java虚拟器) 上运行, 而所有系统都可以安装jre, jre中包含jvm
2.java基本数据类型
(1)基本数据类型有8种:
其中四种整型,两种浮点型,一种字符型,一种布尔型
(2)引用数据类型基本数据类型 整数 byte 1字节 8位 -2^7 ~ 2^7-1 -128~127 short 2字节 16位 -2^15~2^15-1 int 4字节 32位 -2^31~2^31-1 默认 long 8字节 64位 -2^63~2^63-1 加L或l 小数 float 4字节 32位 -2^31~2^31-1 加f或F double 8字节 64位 -2^63~2^63-1 默认 布尔 boolean 1字节 值: true:真 false:假 注意:boolean不参与转换 字符 char 2字节 16位 0~2^16-1:0~65535 注意:java中的字符使用单引号包裹,如'a','中',' ','' 引用数据类型 引用数据类型: 内存栈中存储的是地址,其地址引用了堆中的一块内存 字符串 String 注意:java中的字符串使用双引号包裹,如"abc","helloworld","德玛西亚" 所有类都是引用数据类型
3.转义字符
常用的转移字符 \n:换行 \t:制表 \":双引号 \':单引号 \\:单斜杠
4.引入方法的原因
- 包装一段代码,降低方法内代码与方法外代码的关联度(降低耦合度)
- 提高代码的复用率,减少代码的书写
- 书写位置: 类中方法以外
- 方法调用:
方法名(实参列表); 注意: 传入的实参必须与定义的形参 长度一致 顺序一致 数据类型一致
- 重载概念: 同一个类中,方法名相同,形参列表不同
5.排序
排序 1,冒泡排序 核心思想:相邻比较 2,选择排序 核心思想:确定交换的位置 放置的位置 最值的位置 3,JDK提供的排序 核心思想:快速排序 代码: Arrays.sort(数组名);
6.相关概念
- 数组概念: 用来存放一组数据类型相同的数据
- 二维数组的概念: 将一维数组作为数据存储的数组
- 数组的创建:
动态创建: 数据类型[] 数组名 = new 数据类型[]{值1,值2,值3,....}; 静态创建(必须在声明时赋值): 数据类型[] 数组名 = {值1,值2,值3,...};
- 分支语句: 判断所给定的条件的真值,根据判断的结果对应执行不同的语句
if(条件表达式1){ 当条件表达式1为true,执行此处代码 } switch(变量){ case 常量1: 当变量值等于常量1时,执行此处代码 break; }
- 循环语句: 重复多次执行某一段特定代码
while do while 省略 for 语法: for(表达式1;条件表达式2;表达式3){ 循环体4 } 表达式的作用: 表达式1:初始化变量(给变量第一次赋值) 条件表达式2:循环条件 表达式3:改变表达式1中的变量的值 执行流程: 1,2,4,3,2,4,3,2,4,3,...2
- 方法: 包装一段代码,使其方便使用,提高代码的复用性,降低代码的耦合度
方法的定义 语法: 访问权限修饰符 修饰符 返回值类型 方法名(形参列表){ 方法体 return xxx; } 方法的调用 语法: 方法名(实参列表);//实参列表要和所定义形参列表的长度一致、类型一致、顺序一致 或: 数据类型 变量名 = 方法名(实参列表); 注意:有返回值的方法才能用
2.易混淆点
1.++:自增底层原理
++在前:
如:
int num = 10;
++num;
步骤:
1,获取num的值
2,给num的值加1
3,将加好的值赋值给num
++在后:
如:
int num = 10;
num++;
步骤:
1,获取num的值并存储
2,给num的值+1
3,将加好的值赋值给num
4,使用存储的值参与运算
2.逻辑运算符 (&与&& ,|与||)
&:与
同真为真,有假为假
&&:短路与
同真为真,有假为假
一旦发现前面有假,将不在判断后面的短路与逻辑
|:或
有真为真,同假为假
||:短路或
有真为真,同假为假
一旦发现前面有真,将不在判断后面的短路或逻辑
注意:
1,只能给基本数据类型使用
定义:
使用 运算符 连接的 数值或变量 称为表达式
使用 逻辑运算符 的 表达式 被称为条件表达式
逻辑运算符有:
< > <= >= == != & && | || !
3.字符串判断是否相等 (判断字符串是否相等—— ==与equals)
- 牵扯到jvm内存管理机制(见下文)(==判断地址是否相同,equals判断内容是否相等)
使用equals
语法:
boolean 变量名 = 字符串1或字符串变量1.equals(字符串2或字符串变量2)
如果两个字符串内容相同变量名对应的值为true,否则对应的值为false
例子:
String str01 = "Hello";
String str02 = "Hello";
boolean b = str01.equals(str02);
System.out.println(b);
注意:
== 判断引用数据类型是判断 内存地址 是否相同
equals判断的是字符串内容是否相同
4.位运算
- 在二进制的状态下,将其小数点左移或右移进行改变,结果以十进制数值输出
public static void main(String[] args) {
//位运算:以 二进制 的数值表示形式移动,以十进制的数值形式表现出来
int num=3;
int num01,num02;
num01=num<<2; // 00000011 --->00001100(左移两位)
num02=num>>2; // 00000011 --->00000000(右移两位)
System.out.println(num+"左移两位后的数值为:"+num01);
System.out.println(num+"右移两位后的数值为:"+num02);
}
5.java中Scanner类相关点
(1)next()与nextLine()的区别
- next()
1、一定要读取到有效字符后
才可以结束输入。
2、对输入有效字符之前
遇到的空白,next() 方法会自动将其去掉。
3、只有
输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
4、next() 不能得到带有空格的字符串。- nextLine()
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
(2)hasNextXXX()
- 如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取:
示例: 以下实例我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:
public static void main(String[] args) { System.out.println("请输入数字:"); Scanner scan = new Scanner(System.in); double sum = 0; int m = 0; /*scan.hasNextDouble()先将读取到的内容放入缓存判断其类型, 若符合浮点daouble型,在将其赋值给x变量(不需要额外输入,其本身已在内存缓冲中)*/ while (scan.hasNextDouble()) { double x = scan.nextDouble(); m = m + 1; sum = sum + x; } System.out.println(m + "个数的和为" + sum); System.out.println(m + "个数的平均值是" + (sum / m)); scan.close(); }
6.流程控制语句
- break、continue 均可以使用标记跳出指定循环
- break
break在循环中单独使用,表示 结束当前 循环 break在循环中配合标记,可以 跳出指定 循环 注意:如何在循环中使用switch,switch中有break,表示跳出当前switch
- continue
continue在循环中单独使用,表示 跳过本次 循环 continue在循环中配合标记,可以 跳过指定 循环 注意:只能在循环中使用
- 示例:
public static void main(String[] args) { // TODO Auto-generated method stub //标记循环处Tag Tag:for (int i = 0; i <= 3; i++) { for (int j = 0; j <= 10; j++) { if (i==2&&j==3) { //跳出指定for循环 break Tag; } System.out.print(j+" "); } System.out.println(); } }