Java基础 学习笔记 1
单词及运算符
关键字
被Java语言赋予特殊含义的单词,所有关键字均为小写。
根据用途可分为以下几类:
1.用于定义数据类型的关键字:
class interface byte short int long float double char boolean void
2.用于定义数据类型值的关键字:
true false null
3.用于定义流程控制的关键字:
if else switch case default while do for break continue return
4.用于定义访问权限修饰符的关键字:
private protected public
5.用于定义类,函数,变量修饰符的关键字:
abstract final static synchronized
6.用于定义类与类之间关系的关键字:
extend implements
7.用于建立实例,引用实例,判断实例的关键字:
new this super instanceof
8.用于异常处理的关键字:
try catch finally throw throws
9.用于包的关键字:
package import
10.其他修饰符关键字:
native strictfp transient volatile assert
标识符
是指在程序中自定义的一些名称。
由26个英文字母(大小写),数字0-9,符号_ $组成。
合法的标识符规则
1.数字不可以作为开头
2.不可以使用关键字
Java严格区分大小写。
Java中的名称规范
1.包名:多单词组成时所有字母都小写。
2.类名接口名:多单词组成时,所有单词的首字母都大写
3.变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。
4.常量名:所有字母都大写,多单词时每个单词用下划线连接。
Java注释
1.单行注释:
//注释内容
2.多行注释:
/*注释内容*/
3.文档注释:
/**
注释内容
*/
常量与变量
常量
常量可分为:整数常量、小数常量、布尔型常量、字符常量、字符串常量、null常量。
变量
名称 | 大小 | 取值范围 | 备注 | |
基本数据类型 | ||||
byte | 1字节 | -2^7 ~ 2^7-1 | 整数类型 默认为int 定义long类型时需在变量值后加上小写l |
|
short | 2字节 | -2^15 ~ 2^15-1 | ||
int | 4字节 | -2^31 ~ 2^31-1 | ||
long | 8字节 | -2^63 ~ 2^63-1 | ||
float | 4字节 | - | 小数类型 默认为double 定义float类型时需在变量值后加上小写f |
|
double | 8字节 | - | ||
char | 2字节 | - | - | |
boolean | - | true或false | - | |
引用数据类型 | ||||
类(class) | - | |||
接口(interface) | ||||
数组([]) |
运算符
算术运算符
+,-,*,/,%,++(前置),++(后置),–(前置),–(后置),+(字符串相加)
赋值运算符
=,+=,-=,*=,/=,%=
short c = 3;
c = c + 3;//编译无法通过,因为c会被提升为int类型,无法赋值给short类型
c += 3;//编译通过,+=在给c赋值时,自动完成了强转操作
比较运算符
==,!=,<,>,<=,>=,instanceof(检查是否是类的对象)
逻辑运算符
&,|,^,!,&&,||
&:两边都为true时,结果才为true。其他均为false。
|:两边都为false时,结果才为false。其他均为true。
^:两边相同结果为false,两边不同结果为true。
&&和||在进行布尔值运算时会发生短路(不满足条件时就不再运算了)。
位运算符:
<<:左移运算符,其实是乘以2的移动位数次幂
>>:右移运算符,实际是除以2的移动位数次幂
>>>:无符号右移。
>>与>>>的区别:
>>右移最高位补什么由原有数据的最高位决定。
>>>右移无论最高位补什么都补0。
public class test1 {
public static void main(String[] args){
System.out.println(9<<2);
System.out.println(9>>2);
System.out.println(9>>>2);
System.out.println(-9<<2);
System.out.println(-9>>2);
System.out.println(-9>>>2);
}
}
/*
结果是:
36
2
2
-36
-3
1073741821
*/
&:按位与运算
|:按位或运算
^:按位异或运算
//利用异或将两个变量的值互换,不借助中间变量
public class test1 {
public static void main(String[] args){
int m = 3,n = 8;
System.out.println("n=" + n + ",m=" + m);
n = n ^ m;
m = m ^ n;
n = n ^ m;
System.out.println("n=" + n + ",m=" + m);
}
}
~:该数的反码
三元运算符
格式:(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1。
如果条件为false,运算后的结果是表达式2。
语句
判断语句
if(条件表达式){
执行语句块
}//以下可省略
else if(条件表达式){
执行语句块
}
else{
执行语句块
}
选择语句
switch语句
switch(表达式)
{
case 数值1:
执行语句;
break;
case 数值2:
执行语句;
break;
...
default:
执行语句;
break;
}
1.被选择表达式只接受byte,short,int,char类型结果
2.语句内case无定义顺序,执行时先从第一个定义的case语句开始执行
3.switch语句只有碰到break或者执行到右大括号才会结束
循环语句
while:
格式:
while(条件表达式)
{
执行语句;
}
do while:
格式:
do{
执行语句;
}while(条件表达式);
无论条件是否满足,循环体至少被执行一次。
for:
格式:
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
其他流程控制语句
break:
结束当前循环
public class test1 {
public static void main(String[] args){
w:for(int i = 0;i < 3;i++){
for(int y = 0;y < 3;y ++){
System.out.println("i=" + i);
break w;
}
}
}
}
/*
Java里面可以给break语句设置标记,标记跳出的循环
运行结果为:i=0
*/
continue:
结束本次循环继续下次循环
函数
格式
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)
{
执行语句;
return 返回值;
}
重载
定义:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
特点:与返回值类型无关,只看参数列表。
public int add(int x,int y){
return x + y;
}
public int add(int x,int y,int z){
return x + y + z;
}
数组
同一种类型数据的集合.
一维数组
格式:
//元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
int[] arr = new int[5];
//元素类型[] 数组名 = new 元素类型[]{元素,元素,元素,...};
int[] arr = new int[]{3,5,1,7};
int数组的初始化默认值为0,boolean类型的数组初始化为false,double类型数组初始化默认值为0.0。
(插播一些内存管理)
栈内存:
用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:
数组和对象,通过new建立的实例都存放堆内存中。每一个实体都有内存地址值,实体中的变量都有默认初始化值,当它不再使用时,会被垃圾回收器回收。
上述代码在内存中的表示如图:
//对数组进行选择排序
//即每次拿数组未确定的头元素与剩下的数组元素比较
for(int i = 0;i < arr.length;i ++){
for(int j = i + 1;j < arr.length;j ++){
if(arr[i] > arr[j]){
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
二维数组
举个栗子:
int[][] arr = new int[3][];
表示arr数组中有3个一维数组,每一个一维数组都是默认初始化值null,可以对它们分别进行初始化。
int[][] arr = new int[3][];
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
对于上面的代码,它在内存中的表示如图:
To be continue…