介绍:入门的语言是vb,py和js,云借购的时候发现沐言科技的书排版很不错,看着比较顺眼,就买了py、C和Java的,记录一些学习的笔记
参考:《Java从入门到项目实战》沐言科技 李兴华;浙大的MOOC
目录
1.下载JDK,配置环境变量。
2.JShell交互式编程
?3.第一个程序
4.设定class path 环境属性
5.Java注释
6.Java数据类型
7.运算符
8.进制转换
?9.if??switch 分支结构
10.循环结构
?11.方法
1.下载JDK,配置环境变量。
JDK根目录(Mac系统):资源库/Java/JavaVitrualMachines/jdk——.jdk/Contents/Home
- bin目录:存放用于JDK开发的一些终端命令工具,如:
- “javac”:将java源文件编译为class文件(即自解码文件);
- “java”:运行class文件。
- db目录:包含一个java开发的开源的关系型数据库;
- include目录:包含一些C语言的头文件;
- jre目录:JDK所依赖的java运行时;
- lib目录:存放JDK开发工具所依赖的一些库文件;
- man目录:存放JDK开发工具的说明文档。
- 环境变量配置参考:MAC安装JDK及环境变量配置_GeekTech-CSDN博客_mac配置java环境变量
输入”java -version”,如果看到jdk版本为1.8则说明配置已经生效
2.JShell交互式编程
打开jshell:终端输入"jshell",即可启动
通过jshell运行本地程序:"/open+路径"
输入"/exit",退出jshell模式
?3.第一个程序
VScode配置Java参考:来源(知乎-那天)
主要是安装「Java Extension Pack」,新建一个.java项目:
pubic class Hello{ //程序所在类
public static void main(String[]args){ //程序主方法
System.out.println("输出追加换行");//系统输出
}
}
?命名为Hello.java(必须与class类名一致)
编译java:终端输入javac,拖入Hello.java,回车
? ? 运行成功,同一目录会出现.class文件
切换到.java的上一级目录:cd 路径
解释程序:输入java Hello
?其他Mac的终端操作:python 学习日记之mac 终端切换路径、目录以及打开py文件_Gavin12334的博客-CSDN博客_python终端切换目录
- pwd(print working directory):显示当前目录的绝对路径,
- cd(change directory):转换目录
- cd(不加参数)? ? ? ? ? 进入默认目录 "/Users/用户名"
- cd(文件夹路径)? ? ? 进入指定的目录
- cd ..? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回上级目录
- cd -? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回上一个访问的目录
- ls(list directory contents):查看当前目录下的文件
- open 路径/.文件名:打开文件
4.设定class path 环境属性
终端:
- SET CLASSPATH = 路径
- SET CALSSPATH = . (当前目录)
全局环境属性:设定"CLASS PATH"为"."并保存。
5.Java注释
参考:Java 多行注释和javadoc文档注释_笨鸟先fly的博客-CSDN博客_java多行注释和文档注释
最常用://单行注释 cmd+/
// 单行注释 cmd+/
/* 多行注释,不允许嵌套多行注释 ?*/
/** ?* 文档注释 ?*@author [-1][2] ?*/
文档注释的生成:
在 文件夹 下就可以查看 生成的文档注释——index.html
注意:如果网页显示乱码,修改编码方式,加上:-encoding UTF-8 -charset UTF-8
举例:javadoc -d comment1 -encoding UTF-8 -charset UTF-8 -author -version Hello.java
6.Java数据类型
【基本数据类型】
- 数值:
- 整数—(byte,int,short,long)
- 浮点数-(float,double)
- 字符(char)
- 布尔型(boolean)
【引用数据类型】
不同类型变量的定义方法:
public class Hello{ //程序所在类
public static void main(String[]args){ //程序主方法
int x = 10; //整数int
double y = 10.2; //浮点float
double result = x+y; //可以写表达式
char name = 'A'; //字符char
boolean flag = true; //布尔boolean
String str = "字符串";//字符串String
var variable = "动态定义";//var动态,兼容性不高
System.out.println(result);//系统输出
System.out.println(name);
System.out.println(flag);
System.out.println(str);
System.out.println(variable);
boolean flag = false; //布尔boolean
if(flag){
System.out.println(flag);
}
}
}
不同变量使用注意的要点
int 整型 | 【溢出】采用long变量 long max = 2147483647; //定义long型 System.out.print(max+1L); //转换为long型 System.out.print((long)max+1);//转换为l变量 【int结果无法保存小数】 夹带一个私货就行 System.out.print((double)?x / y );//转换为浮点 System.out.print(x /?(double)?y); //转换为浮点 | byte 字节 | 【强制类型转换】byte∈(-128,127) 范围以内 → int自动转换为byte 范围之外 → 必须强制转换,否则数据溢出 byte num = 20; byte num = (byte) 200; | float 浮点 | float x =?(float) 10.1; float y?=?10.1?F; | char 字符 | 【Unicode与ASCII的相同部分】 ? ? ? ? 65 ('A') ~ 90?('Z') ????????97 ('a') ~ 122?('z') (加32变小写) ????????48 ('0') ~ 57?('9') 【char转int】(char) num; 【char保存中文】只能保存一个字。 | boolean 布尔型 | 🆘 Java不支持0,1来表示布尔。 | String 字符串 | 【字符串定义】String str = "字符串"; 【字符串连接】+ 【混合运算】可能会转为数字,注意使用“括号”改变运算优先级,也不要用太复杂的表达式。 【转义符】 ? ? ? ? 换行(\n) ? ? ? ? 制表符(\t) ? ? ? ? 反斜杠(\\) ? ? ? ? 双引号(\") ? ? ? ? 单引号(\') | var 动态 | var可以定义任意类型变量,但Java的动态变量定义并不如JS、Py等语言强大,本书不建议使用var定义变量。 |
7.运算符
算数运算符
+ | - | * | / | % | = | ?: | 加 | 减 | 乘 | 除 | 取余数 | 赋值 | 三目运算符 |
关系运算符
> | < | >= | <= | == | != | 大于 | 小于 | 大于等于 | 小于等于 | 等于 | 不等于 |
逻辑运算符
& | && | | | || | ! | () | 与 | 短路与 | 或 | 短路或 | 否 | 括号 |
位运算符
& | | | ^ | ~ | << | >>> | 按位与 | 按位或 | 异或 (同0异1) | 取反 | 左移位 (>>右移) | 无符号 右移位 |
简化赋值、自增减运算符
+= | -= | *= | /= | %= | ++ | -- | | | | | | 自增1 | 自减1 |
【?:三目运算符】
类型 变量名 = 关系判断 ? 值true:值false
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
int x = 10; //整数int
int y = 20;
int max = x > y ? x : y; //逻辑条件? 值true:值false
System.out.println(max);
}
}
?【&与 &&短路与的区别】(短路或||同理)
- 与(&):对所有条件进行判断
- 短路与(&&):如果前面的判断条件返回了false,直接终止,返回false
- 短路或(II):如果前面的判断条件返回了true,直接终止,返回true
8.进制转换
参考:进制转换(二进制、八进制、十进制、十六进制)涵盖整数与小数部分,超详细_DJL0718的博客-CSDN博客_进制转化表
位运算符的结果
| B1 | B2 | 与& | 或| | 异或^ |
---|
1 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 1 | 0 | 1 | 1 | 3 | 1 | 0 | 0 | 1 | 1 | 4 | 1 | 1 | 1 | 1 | 0 |
【异或^】0同1异
【位与& 位或| 操作】
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
int x = 13;
int y = 7;
System.out.println(x & y); //位与计算
System.out.println(x | y); //位或计算
}
}
计算分析: 13的二进制:00000000000000000000000000001101 7的二进制:00000000 00000000 00000000 00000111 “&”结果:0000000000000000 00000000 00000101? ? ?转换为十进制:5 ?“|”结果: 00000000 00000000 00000000 00001111? ? ?转换为十进制: 15
?【移位操作】
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
int x = 2;
System.out.println("左移位后的计算结果:"+(x << 2)); //移位处理
System.out.println("原始变量执行移位后的结果"+x); //原始内容不改变
}
}
该程序利用了左位移的操作模式,实现了23的计算结果;利用位运算可以提升程序性能。
?9.if??switch 分支结构
if分支结构
if | if…else | else if |
---|
if (布尔表达式):{ ? ? ? ? 语句; } | if (布尔表达式):{ ? ? ? ? 语句true; } else { ? ? ? ? 语句false; } | if (布尔表达式):{ ? ? ? ? 语句true; }else if (布尔2):{ }else if (布尔3):{ }…… else if (布尔n):{ }else { ? ? ? ? 语句false; } |
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
int paper = 15000; //当前paper的字数
int min = 10000; //最少字数
int max = 20000; //最多字数
if (paper >= min && paper <= max){
System.out.println("大胆地走到招生办,霸气地拿出paper,说不用找了,你们要的学生就是我!");
}else if (paper > max){
System.out.println("同学别卷了,卷是没有幸福可言的");
}else{
System.out.println("同学别躺平了,不卷是没有幸福科研的");
}
}
}
switch语句
swith只能判断(int、char、枚举、String)
不支持布尔表达式
可以使用break终止运行其余case。
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
String details = "情节严重"; //内卷情节
switch (details){
case "情节恶劣":{
System.out.println("你这个卷王!朕要杀了你!");
break;
}
case "情节严重":{
System.out.println("卷的好,赐自尽");
break;
}
case "显著轻微":{
System.out.println("朕赐你一号,叫卷心菜");
}
}
}
}
10.循环结构
while 循环结构
while 循环 | do…while循环 |
---|
while (循环判断):{ ? ? ? ? 循环语句; ? ? ? ? 修改循环结束的条件; } | do { ? ? ? ? 循环语句; ? ? ? ? 修改循环结束的条件 } while(循环判断)?; |
用while实现1~10的数字累加:
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
int sum = 0 ; //存储结果的变量
int num = 1 ; //控制循环
while (num<=10){
sum += num;
num++ ;
}
System.out.println(sum);
}
}
用do…while实现1~10的累加
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
int sum = 0 ; //存储结果的变量
int num = 1 ; //控制循环
do {
sum += num;
num++;
} while (num <= 10);
System.out.println(sum);
}
}
for 循环
for (初值;判断;计步器处理){
? ? ? ? 语句;
}
continue; break;
for循环:确定循环次数
while循环:不确定次数,
确定结束条件
退出本次循环 退出整个循环
使用continue控制循环:
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
for (int x = 0; x < 10; x++){
if (x % 3 == 0){
continue;
}
System.out.println(x);
}
}
}
如果把continue换成break:
利用嵌套循环打印乘法口诀表:
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
for (int x = 1; x <= 9; x++){ // 外部循环
for (int y = 1; y<=x; y++){
System.out.print(y+"*"+x+"="+(x*y)+"\t");
}
System.out.println();//换行
}
}
}
利用嵌套循环打印三角形:
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
int line = 5; //控制行数
for (int x = 0; x < line; x++){ // 外部循环,控制行数
for (int y = 0; y < line - x; y++){ //每行的空格数量逐步减少
System.out.print(' '); //输出空格
}
for (int y = 0; y <= x; y++){
System.out.print('?'); //输出心形
}
System.out.println(); //换行
}
}
}
?
?11.pulic static 方法
定义一个无参数、无返回值的方法:
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
printInfo(); //调用方法
printInfo();
}
public static void printInfo(){//定义方法
System.out.println("***********");
System.out.println("千红一哭");
System.out.println("***********");
}
}
定义一个有参数、有返回值的方法:
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
String result = payAndGet(20.0); //调用方法并接收返回值
System.out.println(result);
System.out.println(payAndGet(1.0));
}
/**
* 定义一个支付并获取内容的方法,该方法可以在主方法直接调用
* @param money 要支付的金额
* @return 根据支付结果获取相应的返回信息
*/
public static String payAndGet(double money){
double price = 10.0;
if (money >= price){
return "用"+(money)+"元钱购买一份快餐,找零"+(money-price);
}else{
return "余额不足,请充值或捡漏。";
}
}
}
?方法重载:方法名称相同,参数类型或个数不同,
方法递归调用:方法本身重复进行,一定要设置好结束条件避免内存溢出。
定义方法重载:
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
int resultA = sum(10,20); //定义调用2个int的方法
int resultB = sum(10,20,30); //定义调用3个int的方法
double resultC = sum(11.2,25.3); //定义调用2个double的方法
System.out.println("加法执行结果:"+resultA);
System.out.println("加法执行结果:"+resultB);
System.out.println("加法执行结果:"+resultC);
}
/**
* 实现2个int的加法计算
* @param x 数字1
* @param y 数字2
* @return 计算加法结果
*/
public static int sum(int x, int y){
return x+y;
}
/**
* 实现3个int的加法计算
* @param x 数字1
* @param y 数字2
* @param z 数字3
* @return 计算加法结果
*/
public static int sum(int x, int y,int z){
return x+y+z;
}
/**
* 实现2个浮点数的加法计算
* @param x 数字1
* @param y 数字2
* @return 计算加法结果
*/
public static double sum(double x, double y){
return x+y;
}
}
这里没有采用书上统一输出的建议(报错int和double转换可能会有数据损失)
方法递归调用:
实现1~10数字累加:?return num + sum(num - 1); //递归调用
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
System.out.println(sum(10)); //1~10累加
}
/**
* 数据的累加操作
* @param num 要进行累加的操作
* @return 数据累加的结果
*/
public static int sum(int num){ //最大值
if (num==1){ //递归结束调用
return 1; //最终结果返回了1
}
return num + sum(num - 1); //递归调用
}
}
实现1!~10!阶乘的累加:?return num *factorial(num - 1); //递归调用
public class Demo{ //程序所在类
public static void main(String[]args){ //程序主方法
System.out.println(sum(10)); //1!~10!累加
}
/**
* 实现阶乘数据的列加操作,根据每一个数字进行阶乘操作
* @param num 要处理的数字
* @return 指定数字的阶乘结果
*/
public static double sum(int num){ //最大值
if (num==1){ //递归结束条件
return factorial(1); //返回1的阶乘
}
return factorial(num)+sum(num-1); //保存阶乘结果
}
/**
* 定义方法实现阶乘操作
* @param num 根据传入的数字实现阶乘
* @return 阶乘结果
*/
public static double factorial(int num){
if (num==1){ //阶乘结束条件
return 1; //返回1的阶乘
}
return num * factorial(num-1); //保存阶乘结果
}
}
?第一部分Java编程基础 完结撒花(??????)??
|