课堂笔记编写软件:typora。(是一个md文件,html开发的,用低版本,高版本收费)
一.了解java
1.1 java是什么
是一门高级的计算机编程语言。
计算机编程语言有如下三类:
1.1 机器语言 二进制 0 1 (给计算机看的)
1.2 汇编语言 一些命令 病毒
1.3 高级语言 java python c c++.....
1.2 能干啥
做开发:开发软件/开发程序。 未来称呼:软件开发工程师/java开发工程师
软件分类:
1.1 系统软件(一般c开发) 常见的系统:windows linux mac
1.2 应用软件 (Java语言都可以开发)
1. 基于PC端 typora chrome ... swing/gui javaFX
2. 基于移动端(又分为android/ios) 微信小程序 app 王者荣耀
3. 基于browser端(浏览器端): 淘宝
1.3 java发展
1995 推出java 也是在C++ 基础之上进行研发 C++--
2009 Oracle jdk1.1 ---- jdk1.17
这17个版本中最常用的版本:(大量使用的是jdk1.8 jdk1.11)
jdk1.6 jdk1.7 jdk1.8 jdk1.11 jdk1.17 (jdk1.11 jdk1.17都是LTS版本 (long term support,长时间提供支持服务的版本))
1.4 java开发平台版本
JAVASE: java标准版 java standard edition (蕴含着swing语言开发和gui编程以及javaFX) 可开发PC端 JAVAEE: java企业版 java enterprise edition 可开发移动端/browser端
JAVAME: java微型版 java mirco edition 用于嵌入式开发/移动端开发
1.5 术语解释
1. JDK JAVA开发工具包 java devlopment kit 只要想编写java代码 必须使用jdk
2. JRE java运行环境 java runtime environment 只要程序想要运行 必须在环境下进行执行
3. JVM java虚拟机 java virtual machine 程序的真正的运行 是在jvm中运行的----> 只认识class文件(字节码文件)
1.6 java语言优势
1. 跨平台(一次编译 到处运行) class文件
2. 语法简单 入门容易
3. 面向对象(对象)----> 封装 继承 多态
4. 具有健壮性----> 1.1 GC(垃圾回收) 1.2 异常处理机制
5. 多线程 Thread
6. 分布式 Socket URL
7. 安全性
二.入门案例
想编写Java代码,必须先安装jdk
2.1 下载安装jdk
1.进入Oracle官网--->点击产品--->点击java
2.拉到最下面,点击立即下载
3.拉到下面,选择jdk11,选择.exe
4.下载之后,双击进行安装
5.这里直接安装到了C盘,其他盘也可。
bin目录:存放.dll配置文件和.exe工具。即存放可执行文件,在win里双击可运行的文件。
conf目录:一些配置
jmods目录:11版本中模块的jar包都在该目录(8版本是在lib目录)
lib目录:存储jar文件,也叫类库文件
6.校验本机是否有jdk,从而辅助Java开发
win+r -----> cmd ----> 输入Java,javac都能运行(但jar等命令不能运行,即不是全部可运行)。
(原因:安装jdk11之后 会自动的在系统的环境变量中 path: 加一行内容。)
若删除该行,java和javac不能运行。
(系统环境:右键此电脑,点属性--->点高级系统设置---->点环境变量)
2.2 配置环境
第一种:
在系统的环境变量中 path: 配置jdk的bin目录。(java和javac命令是依靠bin目录下的java.exe和javac.exe执行的。)
编辑
(用户变量只对当前用户有效。系统变量。不管哪个用户都有效,故一般配置系统变量)
(选择新建)
编辑
(点击浏览,找到bin目录)
编辑
最后依次点击确定即可。
效验后没问题。(jar和javadoc也可运行,只要bin目录里存在这些.exe,都可运行)
第二种:(一般开发推荐该方式,后期tomcat依赖JAVA_HOME)
1.1 新建新的变量: JAVA_HOME=jdk的根目录 C:\Program Files\Java\jdk-11.0.14 编辑
1.2 在系统的环境变量中 path=jdk的bin目录 (动态的获得JAVA_HOME变量的值)
怎么动态获取?
2.3 HelloWorld.java
1. 在计算机里面编写java文件(可先安装Notepad++) -----java源代码
//单行注释: 类名规范: 1. 大写驼峰 2. 见名知意 3.类名必须与java文件名一致 public class HelloWorld{ //程序的入口(函数/方法/功能) //java程序的运行在jvm执行---> 只认识main public static void main(String[] abc){ //编写功能代码 //简单的打印输出一些数据 System.out.println(100); System.out.println("hello world"); } }
2. 运行java程序---> 在jvm里面运行,只加载class文件,故需要先编译(任意一门语言 编写代码 都要编译源代码)
从编译角度分析,编程语言又分为:
1. 编译型语言(自己可以编译) C
2. 解释型语言(在浏览器上进行解释运行 html js css)
java: 两者都不属于,只能手动通过命令编译java代码,编译出class文件。
2.1 编译工作(compile),使用javac指令,后面跟java文件 javac HelloWorld.java
一些doc的简单指令:dir,展示当前路径下的所有一级资源
cd,切换路径。java文件在桌面,故切换到桌面
此时再dir,就会找到该java文件。然后javac HelloWorld.java
显示乱码,win系统只认识GBK。而用Notepad++默认编码格式UTF-8,故将编码格式改成ANSI,等价于GBK。(这是在编码之前可这样做,此时代码已经是UTF-8,故改变编码格式会乱码)
可以如下去做: 先用记事本打开:
然后另存为ANSI:
此时再执行javac HelloWorld.java,桌面会多出HelloWorld.class文件 .class文件可用反编译工具去查看(jd-gui.exe工具)
2.2 运行class文件,使用java指令,后跟class文件名称(不带后缀) java HelloWorld
2.4 注释
1.单行注释 // 注释不参与编译
2.多行注释 /* */
3.文档注释
文档注释用来解释说明 class/interface/enum/每个方法 ,一般在类以及方法上面,格式如下: 一般在类以及 方法上面 /** *@author: *@descrption: *@date: *@version: *@since: */
/** *@author: Lisa *@descrption: 入门案例 *@date: 2022-02-09 12:00:00 *@version: 0.1 *@since: jdk11 */ public class HelloWorld{ //单行注释: 类名规范: 1. 大写驼峰 2. 见名知意 3.类名必须与java文件名一致 //程序的入口(函数/方法/功能) //java程序的运行在jvm执行---> 只认识main /** *@descrption: *@param abc *@param abc *@return *@throws */ public static void main(String[] abc){ //编写功能代码 //简单的打印输出一些数据 /*System.out.println(100); System.out.println("hello world");*/ System.out.println(100); System.out.println("hello world"); } }
2.5 注意
1.只要修改源代码 都需要重新编译
2.java代码是严格区分大小写的
3. 每一行代码的结束都必须加;
三. IDE
以上用记事本写代码,再使用doc命令去编译和运行,效率极低。
IDE是集成开发环境。
常见的IDE有:IDEA Eclipse MyEclipse、
我们使用IDEA,IDEA不仅仅辅助java开发,也支持HTML,CSS,PHP,Python等
有最终版和社区版两个版本,后面用到的web开发等,必须使用最终版。
双击即可。
启动项目,先选择试用30天,创建项目,SDK是软件开发工具包。
src放源代码
运行程序后,out目录存放编译后的class文件。(class文件里没有注释内容)
3.1 修改idea配置
1.修改主题
黑色主题
白色主题
下载相关主题
2. 修改字体
修改字体
3. 修改注释颜色
多行,文档,单行注释
4. 配置文档注释模板
选择class,再选择includes,开启文档注释,写相关内容。
5. 取消首字母敏感
好处:首字母小写时也会有提示。
6.配置编码格式
idea设置-----编码格式设置_翱翔的小菜鸟的博客-CSDN博客_idea 编码设置
7.安装常用插件
Translation中英文翻译工具
8.忽视某些文件
idea忽略某些文件_星夜小筑的博客-CSDN博客_idea忽略
3.2 创建项目
第一种方式:
每次都是一个新的project 默认就是一个窗口一个project
第二种方式: maven项目聚合
一个窗口里面展示多个项目: 创建一个空project-----> 创建多个module 一个module也是一个项目。
四.数据类型
4.1 引用数据类型
String字符串 类 接口 数组 集合
默认值: null
4.2 基本数据类型
4类8种
1. 整数类型
代表的是一个整数。
byte字节 | 1个字节 8bit | -128-127 | 默认值: 0 |
short 短整型 | 2 16 | -2^15 2^15-1 | 0 |
int整型 | 4 32 | -2^31 2^31-1 | 0 |
long 长整型 | 8 | -2^63 2^63-1 | 0L/ 0l |
默认int
2. 小数类型
维护钱数据,不能使用float/double,因为小数间运算可能丢数据,不能保证精度。
维护钱数据,应该使用long(钱的分) 或者BigDecimal(不丢失任意精度的小数类型)
内存 | 取值范围 | 默认值 | |
float | 4 | 0.0F/0.0f | |
double | 8 | 0.0 0.0D |
默认double
3. 单字符类型
char 2个字节 \u0000-\ufffff 默认值: \U0000
必须使用单引号 'a'
4. 布尔类型
boolean 1bit 值只有2个: true 和 fasle 0 1
默认false
4.3 需求
package: 解决类重名问题。
包名规范: 全部小写,一般是:公司域名后缀名 +公司名称+项目名称+模块+其他。
拿www.baidu.com来说,com就是公司域名后缀名。 com.baidu.xxx.xxx
com.javasm.xxx 不勾选则层级展示包。
用代码维护一个学生的基本信息。
性别: 男 ----------单字符 姓名: 张三 ----------字符串 学号:10001 ----------字符串或整数 年龄: 18 成绩: 80.5 是否是好学生: true
/** * 维护学生基本信息 */ public class StudentInfo { public static void main(String[] args) { System.out.println('男'); //单字符用单引号 System.out.println("张三"); //字符串用双引号 System.out.println(1001); System.out.println(80.5); System.out.println(true); } }
/** * 维护学生基本信息 */ public class StudentInfo { public static void main(String[] args) { //程序运行期间产生的数据,叫做字面量/常量。 //一个数据占一块内存,对应有内存地址值(是随机产生的,无法通过该值拿到数据),故应该使用标识维护内存的数据 System.out.println('男'); //单字符用单引号 System.out.println("张三"); //字符串用双引号 System.out.println(1001); System.out.println(80.5); System.out.println(true); //一个标识一个数据,用标识去代表内存地址值(从内存里找数据是通过内存地址值找数据),标识即变量 //变量: 就是内存里面每个数据的标识 System.out.println("--------------------------"); //变量名称: 小写驼峰 目前不能重名 不能使用关键字 //数据类型 变量名称 = 数据; //初始化局部变量(只在main方法有效) char gender = '男'; //变量名要见名知义 String studentName = "张三"; int studentNo = 10001; int age = 18; float score = 80.5F; boolean flag = true; //使用变量(运算,打印等) System.out.println(gender); System.out.println(studentName); System.out.println(studentNo); System.out.println(age); System.out.println(score); System.out.println(flag); //运算 age = age + 1; System.out.println(age); } }
4.4 变量
变量: 就是内存里面每个数据的标识. 使用变量定义不同类型的数据。
1. 全局变量
2.局部变量
语法1 :
数据类型 变量名称 = 数据; int num = 100; //初始化一个变量
语法2:
数据类型 变量名称; int num; //声明一个变量
变量名称 = 数据; num = 2; //赋值
3. 注意
string+基本数据类型,又统称为字面量
4.5 数据类型转换
2个相似类型之间发生类型转换。
目前只考虑基本数据类型。-----> 其实就是数值类型之间的转换。
byte short char int long float double,精度从小到大,没有布尔类型
1. 隐式转换(自动转换)
精度低的数据转换成精度高的数据。
2. 强制转换
精度高的数据转换成精度低的数据. 后果: 数据可能会溢出 数据丢失
五. 运算符
使用特定的运算符 实现不同变量之间 不同的数据之间 的相关运算。
5.1 赋值运算符
int age1 = 20; =右边的数据赋值给了 =左边的变量
= | += | -= | *= | /=(除等) | %=(模等) |
赋值 |
5.2 算术运算符
+ | - | * | / | % | ++ | -- | + |
加法 | 取余 | 自增+1 | 自减-1 | 拼接 |
想使用++ -- 这个变量必须要是一个局部变量。并发/多线程 有问题。
5.3 比较运算符
最后结果: boolean
> | < | >= | <= | == | != |
比较2个变量是否相等 |
5.4 逻辑运算符
最后结果类型: boolean
& | && | | | || | ^ | ! |
逻辑与 | 逻辑与 | 逻辑或 | 逻辑或 | 异或 | 获得相反结果 |
5.5 位运算符(了解)
&: 位与 |: 位或 ^: 异或
5.6 三元运算符
语法: 数据类型 变量 = (表达式boolean)?(表达式1):(表达式2);
表达式1和表达式2运算之后的结果类型 必须要一致或者相似。
六.SVN/git
subversion. 版本管理工具。(用于团队开发一个项目的工具),可基于局域网部署
码云 gitee / github,需要联网
七.课后练习
7.1 HelloWorld
//类名规范:1.大写驼峰 2.见名知意 3.类名必须与java文件名一致 public class HelloWorld{ public static void main(String[] args){ //程序的入口(函数/方法/功能) System.out.println(100); System.out.println("Hello world"); } } //compiler编译 comment注释 font字体 author作者 descrption描述 version版本 //live templates 动态模板
7.2 描述手机信息
public class phoneInfo { public static void main(String[] args){ String brand = "小米"; double weight = 12.4; int capacity = 4050; int price = 6999; double thickness = 5.3; System.out.println(brand); System.out.println(weight); System.out.println(capacity); System.out.println(price); System.out.println(thickness); } }
7.3 使用局部变量定义所有的数据类型
public class DataType { public static void main(String[] args){ //整数类型 byte by = -100; short sh = 100; int num = 1000; long longNum = 100L; //小数类型 float f = 10.0F; double d = 10.1111; //单字符类型 char c1 = 'a'; char c2 = '1'; char c3 = '我'; char c4 = 97; //ASCII a char c5 = '\u67d0'; //win系统里的字符映射表 某 System.out.println(c1); System.out.println(c2); System.out.println(c3); System.out.println(c4); System.out.println(c5); //布尔类型 boolean flag = true; System.out.println(flag); //引用类型 String str = "hello"; String str1 = new String("hello"); //括号里是“hello” System.out.println(str); //hello System.out.println(str1); //hello } }
7.4 数据类型转换
public class DatatypeConverter { public static void main(String[] args){ //自动转换 int num = 100; double douNum = num; System.out.println(douNum); //100.0 char ch = 'a'; //97 int num1 = ch; //a转成ASICC码里的数值97 System.out.println(num1); //97 //强制类型转换 double dou = 10.45678; int n = (int)dou; //变量=(目标类型)原类型 System.out.println(n); //10 byte b = (byte) n; //alt+回车 System.out.println(b); short s1 = 10; short s2 = 10; short num3 = (short)(s1 + s2); //整数都默认int,两整数相加还是int,故想要short类型,要强转 System.out.println(num3); } }
7.5 运算符
public class Yunsuanfu { public static void main(String[] args){ //赋值运算符 算术运算符 int num1 = 100; int num2 = 10; System.out.println(num1 + num2); //110 System.out.println(num1 - num2); //90 System.out.println(num1 * num2); //1000 System.out.println(num1 / num2); //10 System.out.println(num1 % num2); //0 int num3 = 10; num3 += 10; //num3 = num3 +10; //20 num3 -= 10; //10 num3 /= 10; //1 num3 *= 10; //10 num3 %= 3; //1 System.out.println(num3); //++ -- int a = 10; int b = a++; //先将a的数值赋值给b,a再自增加1 System.out.println(b); //b=10 System.out.println(a); //a=11 b = ++a; //a先自增加1,再将自增后的结果赋值给b System.out.println(b); //b=12 System.out.println(a); //a=12 int x = 100; x = ++x; //x自增加1,再赋值给x,故x=101 System.out.println(x); x = x++; //x直接赋值给x,故x=101.实际为:temp = x;x++;x = temp;(用到变量缓存) System.out.println(x); String name = "张三"; int age = 30; System.out.println("用户名"+name); //+是拼接 System.out.println("年龄"+age); } }
7.6 比较运算符
public class Yunsuanfu1 { public static void main(String[] args){ //局部变量,且是基本数据类型,比较的是数据。占一块栈内存 int num1 = 100; int num2 = 200; System.out.println(num1 > num2); //false System.out.println(num1 >= num2); //false System.out.println(num1 < num2); //true System.out.println(num1 <= num2); //true //局部变量,且是引用数据类型,比较的是内存地址值,占据两块内存。 //变量和引用是一个概念,变量名称全部在堆内存 //对String而言,数据是常量,在常量池(jdk1.8之后) String str1 = "hello"; String str2 = "hello"; String str3 = new String("hello"); //看到new,内存在堆内存 System.out.println(str1); System.out.println(str2); System.out.println(str3); System.out.println(str1==str2); //true System.out.println(str1==str3); //false //字符串数据比较语法:字符串1.equals(字符串2) System.out.println(str1.equals(str3)); //true } }
7.7 逻辑运算符
public class Yunsuanfu2 { public static void main(String[] args){ //逻辑运算符:多个表达式之间运算 //用户登录:用户名和密码一致 String trueName = "admin"; String truePass = "1234"; boolean flag1 = "admin".equals(trueName); boolean flag2 = "123".equals(truePass); System.out.println(flag1 && flag2); int num1 = 10; int num2 = 100; //第一个表达式true 不管使用&/&& 后面的表达式都要参与运算 System.out.println((num1 < num2) & (num1 > num2)); System.out.println((num1 < num2) && (num1 > num2)); //第一个表达式false,&&后面就没必要执行,而&还要执行 //&&:短路与 推荐使用 //&:表达式全部都要执行 System.out.println((num1 > num2) && (num1 < num2)); System.out.println((num1 > num2) && (num1 < num2)); //同上 System.out.println((num1 > num2) | (num1 < num2)); System.out.println((num1 > num2) || (num1 < num2)); //^异或,相同则为false System.out.println(false ^ true); //! 非,相反的结果 System.out.println(!true); } }
7.8 位运算
public class Yunsuanfu3 { public static void main(String[] args){ System.out.println(4 & 7); //转换成2进制进行位运算,结果为4 //0100 //0111 //0100 System.out.println(4 | 7); //7 //0100 //0111 //0111 System.out.println(4 ^ 7); //0011,结果为3 //0100 //0111 //0011 }
7.9 三元运算符
public class Yunsuanfu4 { public static void main(String[] args){ String result = (4 > 7)?"hello":"helloWorld"; //helloWorld System.out.println(result); //看精度高的数据类型 int num = (int)((5 < 1)?100:200.234); //200 System.out.println(num); //求三个数的最值 int a = 100,b = 200,c = 300; int max = (a > b)?a:b; max = (max > c)?max:c; //或者int max = (a > b)?((a > c)?a:c):((b > c)?b:c); System.out.println(max); } }
八.作业
8.1求一光年是多少千米 , 光在真空中传播速度299792458 m/s
public class Homework1 { public static void main(String[] args){ double speed = 299792.458; long time = 365*24*60*60; double distance = speed*time; System.out.println("一光年是多少千米:"+ distance); } }
8.2根据天数(46)计算周数和剩余的天数
public class Homework2 { public static void main(String[] args){ int days = 46; int week = days/7; int leftDay = days%7; System.out.println("周数为:"+week); System.out.println("剩余天数为:"+ leftDay); } }
8.3已知圆的半径radius= 1.5,求其面积 (Java中π用Math.PI表示)
public class Homework3 { public static void main(String[] args){ double radius = 1.5D; //double area = Math.PI*radius*radius;//圆周率用Math.PI表示 double area = Math.PI*Math.pow(radius,2);//N次方用Math.pow()表示 System.out.println("面积为:" + area); } }
8.4自己给定5个整数,通过编程求出最大值(使用三元运算符)
public class Homework4 { public static void main(String[] args){ int a = 1,b = 2,c = 3,d = 4,e = 5; int max = (a > b)?a:b; max = (max > c)?max:c; max = (max > d)?max:d; max = (max > e)?max:e; System.out.println("最大值为:" + max); } }
8.5韩梅梅看中两把价格相同的扇子,想挑选一个扇面较大的扇子购买,请你帮她挑选。 A款折叠扇:展开后角度为134.6°,扇骨长26.5cm 。 B款圆扇:扇柄长12.3cm,扇子总长度36.5cm 。注:圆形面积 = 3.14 * 半径平方 ,扇形面积 = 3.14 * 半径平方 * (度数/360)
public class Homework5 { public static void main(String[] args){ double areaA = Math.PI*Math.pow(26.5,2)*134.6/360; double areaB = Math.pow(36.5-12.3,2)/Math.PI; String max = (areaA>areaB)?"A款折叠扇":"B款圆扇"; System.out.println(max); } }
8.6变量a和b的值互换 例如:int a = 10,b=20;
public class Homework6 { public static void main(String[] args){ int a = 10,b = 20; int temp = a; a = b; b = temp; System.out.println(a); System.out.println(b); } }
8.7定义一个变量,是一个三位数,求各个位数的和. 如:123,结果是1+2+3=6
public class Homework7 { public static void main(String[] args){ int num = 123; int bai = num / 100; int shi = num / 10 % 10; int ge = num % 10; int sum = bai + shi + ge; System.out.println(sum); } }