JAVA 学习笔记
1. HelloWorld
//HelloWorld.java
class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
/*
1.每个java文件有且只有一个main方法
2.每个java文件可以包含多个class,但只能有一个class有main方法
3.运行方法 找出java、javac的安装路经 -> 通过cmd切换到安装路经 -> javac ***.java 进行编译 -> java 编译后的带有main方法的class文件
4.同一个java文件如果有多个class,每个class将会被单独编译成一个class文件
5.同一个java文件下,不能有命名相同的class
5.语句结束用;
*/
2.命名习惯
* 包名一般全小写 eg: xxxyyyzzz
* 类名、接口名首字母大写 eg:XxxYyyZzz
* 变量、方法名首字母不大写,其余单词首字母大写 eg:xxxYyyZzz
* 常量名所有字母均大写,并用_隔开 eg:XXX_YYY_ZZZ
3.变量
数据类型 | 关键词 | 备注 |
---|---|---|
整型 | int | 4字节, − 2 31 -2^{31} −231 ~ 2 31 2^{31} 231-1 |
字节型 | byte | 1字节,-128 ~ 127 |
短整型 | short | 2字节, − 2 15 -2^{15} −215 ~ 2 15 2^{15} 215-1 |
长整型 | long | 8字节, − 2 63 -2^{63} −263 ~ 2 63 2^{63} 263-1,必须以L或l结尾,否则默认为int |
单精度 | float | 4字节,-3.403E38 ~ 3.403E38,仅能保留7位小数,需以f或F结尾,否则默认为double |
双精度 | double | 8字节,-1.798E308 ~ 1.798E308,保留15位小数 精度详解 |
字符 | char | 2字节,字符非字符串,只能是一个字符,用单引号’’,‘a’ |
布尔型 | boolean | true or false |
类 | class | 引用数据类型 |
接口 | interface | 引用数据类型 |
数组 | [] | 引用数据类型 |
字符串 | String | 引用数据类型,用双引号"hello world",可以和基本数据类型做计算 |
long long_type = 12345L;
float float_type = 123.4f;
String s = "hello";
int i = 1234;
String s2 = s + i;
//i被强制转换为String类型
/*
1.变量必须先声明后使用
2.变量有作用范围
3.同一个作用域内不可定义同名的变量
eg: int age = 12;
int age = 12;(错)
*/
- 自动类型提升
byte b = 1;
int i = 177;
int i2 = i1 + b;
//不同数据类型之间的运算需要用“更高级类型”来存,防止数据溢出
byte < short < int < long < float < double
// byte、short、char三者之间(包括自己跟自己)作运算,需用int型接收
- 强制类型转换
//自动类型提升的逆运算
//强转符
double df = 123.33;
int i = (int)df;
4.逻辑运算符
关系 | 运算符 | 备注 |
---|---|---|
逻辑与 | & | a&b,a为false时仍继续判断b的真假 |
逻辑或 | | | a| b,a为真时仍判断b的真假 |
逻辑非 | ! | |
短路与 | && | a&&b,a为false时则结束判断 |
短路或 | ∥ \| ∥ | a ∥ \| ∥b,a为真时则结束判断 |
逻辑异或 | ^ | a,b同真或同假时为false;否则为true |
boolean bool = false;
int num1 = 123;
int num2 = 123;
if(bool & (num1 ++ > 0)){
}
if(bool && (num2 ++ > 0)){
}
//此时num1 = 124;num2 = 123;
5.三元运算符
(条件表达式)?表达式1:表达式2
条件成立则执行表达式1,否则执行表达式2,用于简化if-else
int num1 = 123;
int num2 = 234;
int max = (num1 > num2)?num1:num2
//num1和num2不一定需要相同数据类型,但必须是满足可强制转换的类型
6.程序流程控制
- if-else
if(条件1){
code1;
}
else if(条件2){
code2;
}
else{
code3;
}
- switch case
switch(表达式){
case 常量1:
code1;
//break;
case 常量2:
code2;
//break;
...
case 常量n:
coden;
//break
default:
codeX;
}
/*
当swtich的表达式与case中的常量一致时,程序开始执行常量对应的case内部的code部分
如果不加break跳出,则程序会继续执行后续的所有case内的code,包括default,加break则只执行表达式=常量的case
如果表达式与所有case的常量值均不匹配,则执行default
code部分可以是多行,无需用{}
*/
7.循环
- for循环
/*
for(初始化条件;循环条件boolean;循环迭代条件){
循环体
}
先判断是否满足循环条件,再执行循环体
*/
int sum = 0;
for(int i = 0;i < = 100; i++){
sum += i;
}
//变量i只在for循环内有效,for循环一结束则自动清除
- while循环
/*
while(循环条件){
循环体
循环迭代条件
}
先判断是否满足循环条件再执行循环体
*/
int i = 1;
int sum = 0:
while(i <= 100){
sum += i;
i += 1;
}
- do-while循环
/*
do{
循环体
循环迭代条件
} while(循环条件);
先执行循环体,再判断循环条件是否成立
至少能执行一次循环体
*/
int i = 1;
int sum = 0;
do{
sum += i;
} while(i <= 100);
8.break与continue
/*
break用于switch和循环结构中,用于跳出(结束)当前循环或switch结构
continue用于循环结构,用于跳过当次循环(未结束,只是改变循环条件)
*/
sum += 0;
for(int i = 1; i <= 100; i ++){
if(i % 2 == 0){
continue;
}
sum += i;
}
//计算1-100中基数的和
int sum += 0;
for(int i = 1;i <= 100; i++){
if(i % 2 == 0){
break;
}
sum += i;
}
//sum = 1;
/*
嵌套循环中的用法
break:正常情况下,在嵌套循环中,break只会跳出其所在的当层循环,如需要让break跳出指定的循环层,需要在循环关键词之前加上标记
continue与break原理类似
*/
int sum = 0;
label1:for(int i = 1; i <= 100; i++){
for(int j = 1; j <= 100; j ++){
if(j > 10) break label1;
sum += j;
}
}
//sum = 55
int sum = 0;
label1:for(int i = 1; i <= 100; i++){
for(int j = 1; j <= 100; j ++){
if(j > 10) continue label1;
sum += j;
}
}
// sum = 5500
9.一维数组
-
数组中的概念
1.数组名
2.元素
3.索引
4.长度 -
数组的特点
1.数组是有序的
2.数组中的元素必须是相同的数据类型,可以是基本数据类型也可以是引用数据类型
3.创建数组时,底层会为数组开辟连续的存储空间
4.数组一旦创建,其长度也就固定了,不能修改 -
默认初始化值
数据类型 | 默认值 |
---|---|
int | 0 |
float | 0.0 |
double | 0.0 |
char | 0(‘’\0000’ ascii第0位) |
boolean | false |
String | null(引用数据类型均为null) |
1.数组的声明与初始化
int [] array; //声明
array = new int[]{12,3,4,2};//静态初始化,此时array长度固定为4
int[] array = new int[5];//动态初始化一个长度为5的数组,指定array的长度,暂未给array赋值
2.获取数组指定位置元素
array[0];//获取第一个元素
arraty[1];//获取第二个元素
array[1] = 12345;
3.获取数组的长度
array.length;
4.遍历数组
for(int i = 0; i < array.length; i ++){
array[i];
}
二维数组
- 多维数组的本质是一维数组嵌套一维数组
1.数组的声明与初始化
int [][] array; //声明
array = new int[][]{{12,3,3},{4,2}};//静态初始化,数组的列可以不一致
int[][] array = new int[5][4];//动态初始化1,数组的列必须一致
int[][] array = new int[5][];//动态初始化2,此时数组的列可以不一致
2.获取数组指定位置元素
array[0];//获取第一个元素
arraty[1];//获取第二个元素
array[1] = 12345;
3.获取数组的长度
array.length;
4.遍历数组
for(int i = 0; i < array.length; i ++){
array[i];
}