Day02 Java入门
前言
2021年3月7日,java学习正式开始。
菜鸡硕士放弃算法的幻想转行开发,后期看情况可能转大数据,毕竟机器学习深度学习不能白学。
希望自己能够坚持下来,明年这时候能去大厂实习!
1. 类
java基础单元是类,所有程序都在类中
- public class 类名{}: 类名称要与文件名一致
- class 类名{}: 类名称可以与文件名不一致,但是编译后的*.class文件是类名
- 有多个class时会编译成多个*.class文件,实际很少会出现,一般用一个public class即可
- 首字母大写的驼峰命名法
主方法
public static void main(String [] args){
程序开始执行
}
主方法所在的类成为主类,所有主类都用 public class 定义
屏幕打印
System.out.println(); 输出后追加换行
System.out.print(); 输出之后不追加换行
Shell交互式编程环境
为了省事,不写结构代码,没有python好用
- /open 打开文件直接执行
CLASSPATH
SET CLASSPATH=…
设置JRE解释程序的路径,默认是当前文件夹 或者用 . 表示当前路径
部分软件会更改CLASSPATH,所以需要先设置
- PATH 是操作系统提供的路径配置,定义所有可执行程序的路径
- CLASSPATH 由 JRE 提供用于定义java程序解释时类加载路径,JVM --> CLASSPATH --> 类加载器
注释
编译器编译时不对注释进行处理
- // 单行,用的多
- /* … */ 多行
- /****/ 文档,重要的类和文档用工具写
标识符和关键字
- 标识符由 字母、数字、_ 、$ 组成
- 关键字
2. 数据类型
基本数据类型
描述具体的数字单元
数值型
- 整型:byte, short, int, long default = 0
- 浮点型:float, double default = 0.0
- 整型默认 int
- 首选 int, double
- 数据传输和文字编码用 byte
- 描述内存或文件大小,描述表的主键列用 long
布尔型 default = False
- boolean
字符型 default = ‘\u0000’
- char
引用数据类型
内存关系的使用
数组,类,接口 default = null
溢出
- 超过最大范围后产生溢出,例如int 的max+1得到
public class day02_base {
public static void main(String [] args){
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println(max);
System.out.println(min);
System.out.println("-----------分割线------------");
System.out.println(max+1);
}
}
[out]
2147483647
-2147483648
-----------分割线------------
-2147483648
- 通过强制转换可以处理,不过尽量不用,直接改类型更好
public class day02_base {
public static void main(String [] args){
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println(max+1L);
System.out.println(max+1l);
System.out.println((long)max+1);
}
}
- 小类型可以自动转换成大类型,大类型要强制转小类型
浮点型
- 直接用 double
- 整型计算得浮点数时自动丢掉小数点后,所以需要转换
字符型
单引号表示,unicode编码范围:
- 大写字母 65 - 90
- 小写字母 97 - 122
- 数字 48 - 57
int ai = 'a';
System.out.println((char)(ai-32));
[out] A
布尔型
true 和 false
字符串
String 非基本数据类型,封装得到,双引号表示
-
转义符:\n \t \"
-
字符串连接用 +
-
和数值型相加时把数值型变成字符串连接
String str = "hello world ";
int x = 10 ;
double y = 1.33 ;
System.out.println(str + x + y);
System.out.println((str + (x+y)));
[out] hello world 101.33
[out] hello world 11.33
3. 运算符
优先级用括号解决,不用复杂表达式
数学运算符
num = num + 10 比 num += 10 占更多空间,曾经为了节省内存需要,现在尽量不用或者单独一行写出 ++x
int x = 10 ;
int result = ++x;
int result1 = x++;
System.out.println(result);
System.out.println(x);
System.out.println(result1);
[out]
11
12
11
- 变量++ / – :先用变量计算,再自增/自减
- ++ / – 变量:先自增/自减,再计算
- 变量++ 不改变变量,++变量改变变量的值
关系运算符
汉字编码等价于汉字字符
char c = '我';
int ci = 25105;
boolean flag = ci == c;
System.out.println(flag);
[out] true
三元运算符
重点内容:设置一个逻辑判断后进行赋值操作,避免冗长的赋值,即三元表达式
格式:关系运算 ? 关系满足时的内容 :关系不满足时的内容
注意:合适时使用,尽量不要嵌套
int x = 10 ;
int y = 20 ;
// int z = 5 ;
int max = x > y ? x : y ;
// int max = x > y ? (x > z ? x : z) : (y > z ? y : z)
System.out.println(max);
[out] 20
位运算符
与&,或|,异或^,非~
<<,>> 移位计算
-
乘方,运算不影响原数值
-
2**3 即 2 << (3-1)
化成二进制按位计算:
int x = 13 ;
int y = 7 ;
System.out.println(x & y);
[out] 5
问题:&、| 和 &&、||的区别
- 两者都可以表示逻辑运算符,整体按逻辑运算进行
- &、|所有条件都执行,还可以作为位运算符,两边表达式不是bool类型时即表示位运算
- &&、||若第一个表达式 false/true 则第二个表达式不执行
4. 程序逻辑控制
顺序、分支、循环
if分支
int x = 11 ;
int y = 7 ;
if (x>3 & x<10){
System.out.println("满足条件");
}else if (y<5){
System.out.println("收台湾!");
}else{
System.out.println("打美国!");
}
[out] 打美国!
switch分支
开关语句,根据内容判断,允许 int / char / 枚举 / String 类型,不能逻辑判断
每个case需要break停止,否则将一直执行
switch(数据) {
case 数值 : {
满足时执行 ;
break ;
}
case 数值 : {
满足时执行 ;
break ;
}
default : {
都不满足时 ;
break ;
}
}
while循环
while (布尔表达式){
条件满足时执行;
修改循环条件;
}
do{
循环体 ;
} while()
常用 while ,很少使用 do…while
for循环
for (初始化; 循环判断; 修改条件){
循环体 ;
}
知道循环次数时用 for循环
知道循环结束条件时用 while循环
循环控制
break 和 continue
- break 从此次循环结束
- continue 结束此次循环进行下一次循环,不要用于 continue 其它方法
5. 方法
method,即函数。方法在主类中定义并由主方法直接调用,无返回值时用 void 声明。
- 方法名称和变量名称用首字母小写的驼峰命名法
public static 返回值类型 方法名称([参数类型 变量,...]){
方法体;
return 返回值;
}
调用无参无返回值方法:
- 可以通过 return;结束调用
public class day02_base {
public static void main(String [] args){
printMessage();
}
public static void printMessage() {
System.out.println("成功调用了printMessage方法");
}
}
调用含参含返回值方法:
public class day02_base {
public static void main(String [] args){
String lunch = getLunch(9.82);
System.out.println(lunch);
}
public static String getLunch(double money) {
if (money>20){
return "您的饭请拿好~\n找零:" + (money-15) ;
} else {
return "余额不足,还需:" + (15-money) + "元" ;
}
}
}
方法的重载
方法名称相同,但是参数的类型或者个数不同。根据调用时实参的类型自动选择合适的方法。
- 实际使用时返回值类型设置成相同的
- 例如System.out.print()就是方法重载
方法的递归调用
自己调用自己,解决重复且麻烦的问题。
- 一定要设置递归调用的结束条件
- 每次调用一定要修改参数条件
- 不必要情况不要使用,处理不当会导致内存溢出
public class day02_base {
public static void main(String [] args){
System.out.println(sum(100));
}
public static int sum(int num) {
if (num == 1){
return 1;
}
return num + sum(num-1);
}
}