文章目录
Java学习笔记
二、Java基本语法
1 数据类型
基本数据类型
Java中的char型数据使用Unicode编码,即是一个字符占2个字节的存储空间,最高位不是符号位,取值范围0~65535,比如’a’字符的Unicode码等于97。
大写字母范围:’A’(65)~’Z’(90)
小写字母范围:’a’(97)~’z’(122)
数字范围:’0’(48)~’9’(57)
Java中的逻辑型(boolean)值只有true和false,不能用0和1代替
类型转换规则:
1、byte>short>char>int>long>float>double
2、byte、short、char三种类型的数据在做运算时,会先提升为int,然后再做运算
3、可以将整型常量直接赋值给byte、short、char等类型变量,而不需要进行强制
变量的作用域
public class Variable{
String name; //成员变量,从属于对象
static int age; //静态变量,从属于类
public static void main(String[] args){
{
int number;
number=10; //局部变量,从属于语句块
}
int salary = 3000; //局部变量,从属于方法
}
}
常量
final int NUM1 = 20;//在定义的时候初始化。
NUM1 =30; //不允许,因为常量不能二次赋值。
final int NUM2;
NUM2=20; //允许,因为常量j在这里是第一次赋值。
NUM2=30; //不允许,因为常量不能二次赋值。
2 数据的输入输出
输入
第一步:导入java.util包中的类Scanner,编写在Java源文件中第一行。
import java.util.Scanner;
第二步:创建Scanner对象
Scaanner sc = new Scanner(System.in);
第三步:给友好提示
System.out..println("提示信息");
第四步:接收键盘输入内容
int num = sc.nextInt(); //输入为整型
注意:键盘输入完毕后,必须敲回车
sc.nextBoolean()
sc.nextByte()
sc.nextShort()
sc.nextInt()
sc.nextLong()
sc.nextFloat()
sc.nextDouble()
sc.next()//字符串
char c = sc.next().charAt(0)//字符
输出
System.out.println(); //有回车
System.out.print(); //无回车
System.out.printf("格式控制部分",表达式...)
//可以用'+'连接字符串和其他数据类型,+ 两边至少有一边为字符串
3 数据运算符和表达式
双目:+、-、*、/、%
单目:+(取正)、-(取负)、++(自增)、–(自减)
关系运算符:
运算符 | 含义 | 示例 |
---|---|---|
== | 等于 | a==b |
!= | 不等于 | a!=b |
> | 大于 | a>b |
< | 小于 | a<b |
>= | 大于或等于 | a>=b |
<= | 小于或等于 | a<=b |
注意:关系表达式的运算结果是boolean型,运算符对应的关系成立,结果为true,否则为false
逻辑运算符:
运算符 | 含义 | 示例 | 说明 |
---|---|---|---|
& | 逻辑与 | A&B | 并且,两边都为真,结果才是真 |
| | 逻辑或 | A|B | 或者,两边都为假,结果才是假 |
^ | 逻辑异或 | A^B | 相同为false,不同为ture |
! | 逻辑非 | !B | 取反 |
|| | 短路或 | A||B | 结果和|相同,但是有短路效果 |
&& | 短路与 | A&&B | 结果和&相同,但是有短路效果 |
注意:
&与&&的区别:
“&”:无论任何情况,“&”两边的表达式都会参与运算。
“&&”:当“&&”的左边为false,则将不会计算其右边的表达式,即左false则false。
|与||的区别同理。
位运算
运算符 | 含义 | 示例 |
---|---|---|
& | 按位与(AND) | c=a&b |
| | 按位或(OR) | c=a|b |
^ | 按位异或(形同为0相异为1) | c=a^b |
~ | 取反/按位非(NOT) | b=~a |
<< | 左移,右边空位以补0,左移两位相当于乘4 | b=a<<2 |
>> | 右移,左边空位补最高位即符号位,右移1位相当于除2取商 | b=a>>1 |
>>> | 无符号右移,左边空位补0 | b=a>>>1 |
注意:
&和|既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean类型,就作为逻辑运算符,如果两侧的操作数是整数类型,就是位运算符:
如果操作对象是char、byte、short,位移动作发生前其值会自动晋升为int,运算结果为int。
左移一位相当于乘2的运算,右移一位相当于除2的运算。
byte char short int位移的位数是先对32取余后的结果位移。
long位移的位数是对64取余后的结果位移。
复合运算
运算符 | 含义 | 示例 |
---|---|---|
= | 赋值 | a=3 |
+= | 加等于 | a+=b |
-= | 减等于 | a-=b |
*= | 乘等于 | a*=b |
/= | 除等于 | a/=b |
%= | 模等于 | a%=b |
三目运算符 :逻辑表达式?表达式1:表达式2 经常代替简单的if-else判断
instance of 运算符
instance of运算符是二目运算符,左边的操作元是一个对象,右边是一个类。
p1 instance of Person
当左边的对象是右边的类或子类创建的对象时,该运算符运算的结果是true,否则是false。
优先级与结合性
4 条件流程控制语句
if-else、switch-case-default
5 循环流程控制语句
while、for
6 中断流程控制语句
break、continue、return
7 数组
数组的声明方式
数据类型 [] 数组名
数据类型 数组名[]
注意:
1、Java不允许在声明数组中的方括号内指定数组元素的个数;
2、声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关;
3、声明一个数组的时候并没有数组真正被创建;
数组的初始化
数组名=new 类型[变量个数];
//对已经定义的数组进行空间分配
类型[] 数组名=new 类型[变量个数];
//在申明数组的时候同时进行空间分配
数组的初始化包含两个过程:
空间分配:根据实际数据长度分配空间
对数组中的每个变量赋初值。
注意:数组在分配空间的时候会用缺省的初始值对数组的每个变量进行初始化
数组中变量的初始化
静态初始化:除了用new关键字来产生数组外,还可以直接在定义数组的同时就为数组元素分配空间并赋值
int[] a = {2,3,6}; //静态初始化基本类型数组
User[] mans ={new Man(1,1), new Man(2,2)};//静态初始化引用类型数组
动态初始化:数组定义与数组元素分配空间并赋值的操作分开进行
int[] a 1= new int[2];//动态初始化数组,先分配空间
a1[0]=1;//给数组元素赋值
a1[1]=2;//给数组元素赋值
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中每个元素也被按照实例变量同样的方式被隐式初始化
Int a2[] = new int[2];//默认值:0,0
Bollean[] b = new boolean[2];//默认值:false,false
Sting[] s = new Sting[2];//默认值:null,null
使用数组常见问题
角标越界:当访问到数组中不存在的角标时,就会出现该异常。
错误提示:ArrayIndexOutOfBoundsEception
编译时没有问题,运行时才会报错
空指针:当引用型变量没有任何实体指向时,还在用其操作实体,就会发生该异常。
错误提示:NullPointerException
编译时没有问题,运行时才会报错
打印数组:System.out.println(arr);
[ I @ c16514
@左边是实体类型,右边是哈希值
数组遍历
1、普通for
int[] arr={5,3,2,4,1};
int len=arr.length; //直接使用数组
int[] arr={5,3,2,4,1};
//利用数组长度,可以防止使用数组的时候越界。
for(int i=0;i<arr.length;i++){
//可以利用数组的长度,方便的遍历数组。
System.out.println(arr[i]);
}
2、增强for
//增强for循环for-each是JDK1.5新增加的功能
//专门用于读取数组或集合中所有的元素
//即对数组进行遍历
int[] a = new int[4];
//初始化数组元素的值
for(int i=0; i<a.length; i++){
a[i] = 100*i;
}
//for-each循环:用于读取数组元素的值,不能修改元素的值
for(int m:a){
System.out.println(m);
}
多维数组
//多维数组的申明语法:
int[][] arr1;
//多维数组的初始化语法:
int[][] arr1=new int[3][2];//动态初始化
int[][] arr2=new int[][]{{1,2},{3,4},{5,6}};//静态初始化
int[][] arr3= {{1,2},{3,4},{5,6}};
//多维数组的使用:
int[][] arr1= {{1,2},{3,4},{5,6}};
System.out.println( arr1[1][0] );
//多维数组的长度:
int[][] arr= new int [3][2];
System.out.println(arr.length);//打印二维数组的长度
System.out.println(arr[1].length);//打印二维数组中角标为1的一维数组的长度
不规则数组
int[][] arr1= {{20,13,7},{32,41},{5,62,37,18,9,10}};
多维数组的遍历
class Array{
public static void (String[] args){
int[][] arr = {{2,1,3}, {5,1,7,9}, {2,6,3,0,6}};
for (int x=0; x<arr.length; x++){
for(int y=0; y<arr[x].length; y++){
System.out.println(arr[x][y] + “,”);
}
}
}
}
Arrays在后续章节进行补充…
8 补充——Java内存分析
9 枚举类型
枚举类型是从JDK1.5版本引入的语法
定义:
/*
修饰符 enum 枚举名{
枚举值1,枚举值2,……[;]
//如果没有其他成员,分号可以省略
//注意:其中枚举值1,枚举值2,…称为枚举类型的常量,要符合标识符的规定
}
*/
enum Season{
SPRING,SUMMER,AUTUMN,WINTER
}
声明:
Season x;
//枚举变量x只能取枚举类型中的常量,通过使用枚举名和“.”运算符获得枚举类型中的常量
x = Season.SPRING;