java入门
1. 了解java
1.1 java是什么
是一门计算机编程语言。 编程语言: 1. 机器语言 0 1 2. 汇编语言 3. 高级语言 java python c c++
1.2 从事行业
开发软件。 软件: 1. 系统软件。 windows linux mac 2. 应用软件 1.1 基于pc端的软件 qq wechat javafx swing 1.2 移动端 app 1.3 基于浏览器 淘宝 .....
1.3 java优势
1.1 语法简单 入门容易 1.2 面向对象----> 封装 继承 多态 1.3 跨平台 可移植性 一次编译 到处运行 1.4 健壮性 GC +异常处理机制 1.5 多线程 Thread 1.6 分布式 Socket 1.7 动态性 ---->反射
1.4 java历程
C++-- jdk1.7 jdk1.8 jdk11-----> 学习 LTS long term support jdk17
1.5 java平台版本
1. JAVASE java基础版 java standard edition pc端软件 2. JAVAEE java企业版 java enterprise edition 基于broswer的软件 3. JAVAME java微型版 java micro edition 嵌入式+移动应用
1.6 术语解释
编程语言: 解释型语言: html js 依赖于浏览器进行解释运行 编译型语言: C属于编译型原因
JDK: java开发工具包 java development kit 只要想写java程序 必须使jdk java文件 JRE: java运行环境 java runtime environment 只要java程序想运行 必须jre JVM: java虚拟机 java virtual machine java程序的真正的运行 是在虚拟机运行的, 只认识class文件。
2. 入门案例
2.1 代码编写
检测计算机里面是否提供jdk。win+r打开运行 输入cmd 在窗口中使用java检测。
1. 下载安装jdk 2. 编码 编写java程序。 文件后缀java java文件名称必须遵循规范: 大写驼峰命名 3. 运行程序 3.1 配置环境。配置环境变量 1. 在path ----> jdk的bin目录。 在系统变量中 path: C:\Program Files\Java\jdk-11.0.14\bin 2. 在开发中 推荐使用下面这种方式 2.1 JAVA_HOME: jdk的根目录 tomcat服务器启动 必须依赖JAVA_HOME JAVA_HOME: C:\Program Files\Java\jdk-11.0.14 2.2 配置path 动态的获得JAVA_HOME变量的数据。 path: %JAVA_HOME%\bin 3.2 运行程序 任意一门编程语言程序 都需要编译。 手动编译java程序 成功地编译出来class文件 / 字节码文件. compile 1. javac java文件名称 javac HelloWorld.java 2. 加载class文件 java class文件的文件名称 java HelloWorld
//单行注释:解释说明 //类名: 必须与文件名一致 public class HelloWorld{ //程序执行入口 main函数 //java程序在jvm里面运行 public static void main(String[] strs){ //编写功能性代码 //简单打印输出一些内容即可 System.out.print(100); System.out.print(200); System.out.print(300); System.out.print(500); System.out.print("你好,欢迎来尚马教育"); System.out.print("hello World "); } }
重新修改java代码 都需要重新编译。
2.2 注释
-
-
单行注释
// 可以注释文字 以及程序代码 一次只能注释一行内容
-
-
-
多行注释
/* 多行文字 多行代码 */
-
-
-
文档注释
-
// 一般是用来解释说明类以及方法。 /** * @author: Lisa * @className: HelloWorld * @date: 2022-04-11 12:00:00 * @description: 入门案例 * @version: 0.1 * @since: jdk11 */ /** * @description: * @param aaa xxxx * @param * @return 返回的结果 * @throws 抛出的异常 */
/** * @author: Lisa * @className: HelloWorld * @date: 2022-04-11 12:00:00 * @description: 入门案例 * @version: 0.1 * @since: jdk11 */ public class HelloWorld{ //单行注释:解释说明 //类名: 必须与文件名一致 // //java程序在jvm里面运行 /** * @description: 程序执行入口 main函数 * @param aaa jvm优化的参数 * @return 返回的结果 * @throws 抛出的异常 */ public static void main(String[] aaa){ //编写功能性代码 //简单打印输出一些内容即可 /*System.out.print(100+"\n"); System.out.println(200); System.out.println(300); System.out.println(500); System.out.println("你好,欢迎来尚马教育"); System.out.println("hello World "); } } //1.注释不参与编译的 class文件里面 看不到编写的注释。(IDEA) //2.代码是严格区分大小写。 //3.代码的结束 在末尾都需要加; //4.程序想执行 必须提供 public static void main(String[] args){} //5.必须与文件名一致
3. IDE
// 集成开发环境 integreted development environment Eclipse IDEA 使用 MyEclipse NetBeans
3.1 创建工程
一个窗口一个项目project。
一个窗口展示多个项目module。
3.2 package
public class B { //1. 使用package解决类名重复的问题 //2. 维护分层开发 //package: 包名全部小写 公司域名后缀+公司名称+项目名称+其他 //www.baidu.com //com/org/cn/edu.baidu. //com.javasm.bean //com.javasm.controller //com.javasm.dao //com.javasm.service }
3.3 设置
-
修改字体大小
-
取消首字母敏感
-
统一编码格式
-
设置全局文档注释模板
-
修改颜色
4. 数据类型
使用程序维护一个用户基本信息。
姓名 张三 年龄 18 性别 男 职位 法外狂徒 身高 180.5 数值数据: 整数 小数 字符数据 真/假
4.1 数据类型分类
-
引用数据类型: class interface 数组 等。 String 默认值: null
-
基本数据类型: 四类八种
1. 整数类型
基本数据类型 | 内存 | 取值范围 | 默认值 |
---|---|---|---|
byte 字节 | 1个字节 8bit | -128-127 | 0 |
short 短整型 | 2个字节 | -2^15 - 2^15-1 | 0 |
int 整型(默认类型) | 4个字节 | -2^31 - 2^31-1 | 0 |
long 长整型 | 8个字节 | -2^63 - 2^63-1 | 0L/l |
2. 浮点型
基本数据类型 | 内存 | 取值范围 | 默认值 |
---|---|---|---|
float | 4个字节 | Float.minValue-Float.maxValue | 0.0F |
double(默认类型) | 8个字节 | Double.minValue-Double.maxValue | 0.0D |
小数之间执行运算 会存在数据精度不对 的情况。 BigDecimal
3. 单字符类型
char \u0000-\uffff 2个字节。 unicode 默认值: '' \u0000
一定要使用单引号引用数据。 ‘a’
4. 布尔类型
boolean true/false 默认值: false 1bit 0 1
4.2 编码
//使用局部变量维护内存不同类型的数据 //1. 数据类型 变量名称 = 数据; int age = 18; char gender = '男'; double height = 180.5; boolean isGoodPerson = true; String username = "张三"; String job = "法外狂徒"; System.out.println(username); System.out.println(age); System.out.println(gender); System.out.println(height); System.out.println(isGoodPerson); System.out.println(job);
4.3 类型转换
只适应于基本数据类型。
相似的数据类型之后进行转换。 数值类型。 整数类型、byte short int long 小数类型 float double 字符类型 char
byte->short-> char ->int ->long ->float->double
1. 自动转换
前提: 取值范围小的类型的数据转换成取值范围大的类型的数据。
//1.自动转换 int num = 100; double douNum = num; System.out.println(douNum); char ch = 'a'; int n = ch; System.out.println(n);
2. 强制转换
前提: 取值范围大的类型的数据转换成取值范围小的类型的数据。
有可能会出现数据丢失的问题。
//2.强制转换 //手动实现类型之间的强制转换 目标类型 变量 = (目标类型)数据; double d = 100.5678; int a = (int) d; //alt+回车 System.out.println(a); /*long lon = 1000; byte b = (byte) lon; System.out.println(b);*/ byte by1 = 100; byte by2 = 100; //byte sum = (byte) (by1 + by2); long sum = (by1 + by2); System.out.println(sum);
5. 变量
变量: 代表是内存里面的任意一个数据。可变的数据。维护内存里面不同的数据类型的数据。
5.1 分类
-
全局变量
[访问权限修饰符] [普通修饰符] 数据类型 变量名称 [= 数据]; 访问权限修饰符: public private protected 默认 普通修饰符: static final transient 变量名称: 自己命名 小写驼峰 userAge 在代码里面 自己命名: 标识符
-
局部变量
存在于方法: {} 1. [普通修饰符] 数据类型 变量名称 = 数据; //初始化局部变量 2. [普通修饰符] 数据类型 变量名称; //声明局部变量 变量名称 = 数据; // 赋值 要使用这个局部变量 前提: 必须有值。
public static void main(String[] args) { //数据类型 //1.引用数据类型 //2. 基本数据类型 四类八种 //2.1 整数类型 byte short int long byte by = 100; short sh = 10000; int num = 100; long lon = 100L; //2.2 浮点型 float f = 100.0F; System.out.println(f); double dou = 100.123455D; System.out.println(dou); //2.3 字符类型 char c1 = 97;// ASCII char c2 = 'a'; char c3 = '\u0061'; System.out.println(c1); System.out.println(c2); System.out.println(c3); //2.4 布尔类型 boolean flag = true; System.out.println(flag); //String String str = "hello"; }
6. 运算符
实现数据之间的相互运算。
6.1 赋值运算符
将运算之后的数据赋值给一个变量。
运算符 | 作用 |
---|---|
= | int num = 100; 将100赋值给左边的num变量 |
+= | num+=100; num= num+100; |
-= | |
*= | |
/= | |
%= |
6.2 算术运算符
+ | 加法 |
---|---|
- | |
* | |
/ | 100/3 |
% | 模运算 取余数 100%3 |
++ | 自增 +1 |
-- | 自减 -1 |
+ | 拼接(是否字符串的数据) |
public static void main(String[] args) { //测试赋值/算术运算符 int num1 = 100; num1 += 20;// num1 = num1+20 System.out.println(num1);//120 num1 *= 20; System.out.println(num1);//2400 num1 /= 20; System.out.println(num1);//120 num1 %= 20; System.out.println(num1);//0 int a = 20; int b = 10; System.out.println(a + b); System.out.println(a - b); System.out.println(a * b); System.out.println(a / b);//求商 System.out.println(a % b);//求余 a/b //++ -- System.out.println("----------------------------"); //++ --在变量名之后 先赋值 再运算 int m = 10; int n = m++; System.out.println(m);//11 System.out.println(n);//10 //++ -- 在变量名之前 先运算 再执行赋值 n = ++m; System.out.println(m);//12 System.out.println(n);//12 n = --m; System.out.println(m);//11 System.out.println(n);//11 n = m--; System.out.println(m);//10 System.out.println(n);//11 /*System.out.println("======================="); int x = 100; x = x++; //临时变量缓存机制 int temp = x; x++; x = temp; System.out.println(x);//100*/ //+ System.out.println(10 + 100 + 1.123); System.out.println("100" + 10 + 1 + 2 + 3 + 2); System.out.println(10 + 'a' + 1 + 2 + 3); String name = "jim"; int age =20; System.out.println("用户的姓名:"+name); System.out.println("用户的年龄:"+age); }
6.3 比较运算符
比较的结果: boolean true/false
> | |
---|---|
< | |
>= | |
<= | |
== | 相等于。 比较的是什么 要看数据的数据类型 |
!= |
public static void main(String[] args) { int num1 = 100; int num2 = 100; /*System.out.println(num1 > num2); System.out.println(num1 >= num2); System.out.println(num1 < num2); System.out.println(num1 <= num2);*/ //比较的是数据 System.out.println(num1 == num2);//true //只要是引用数据类型 都是占据2块内存 变量在栈 数据在堆 String str1 = "hello"; String str2 = "hello"; System.out.println(str1); System.out.println(str2); System.out.println("(str1 == str2):" + (str1 == str2));//true //只要是new的东西 都在堆内存 String str3 = new String("hello"); String str4 = new String("hello"); System.out.println(str3); System.out.println(str4); System.out.println("(str3==str4):" + (str3 == str4));//false System.out.println("(str1==str3):" + (str1 == str3));//false System.out.println("(str1!=str3):" + (str1 != str3));//true //引用数据类型: 比较数据 不能使用== 只比较内存地址值 //字符串的数据比较 字符串1.equals(字符串2) System.out.println(str3.equals(str4));//true }
6.4 逻辑运算符
运算的结果: boolean true/false
& | 逻辑与 |
---|---|
&& | 逻辑与 |
| | 逻辑或 |
|| | 逻辑或 |
! | 非 获得相反的结果 |
^ | 相同则假 |
public static void main(String[] args) { //逻辑与: 第一个表达式结果true 后面不管几个都必须执行 System.out.println((5 > 4) & (5 < 3)); System.out.println((5 > 4) && (5 < 3)); //逻辑与: 第一个表达式结果false 其实后面的 表达式就没有必要执行了 // &: 不管第一个是true还是false 所有的表达式全部执行 //&&: 后面表达式就不执行了 短路与 System.out.println((5 < 4) & (5 < 3)); System.out.println((5 < 4) && (5 < 3)); //逻辑或: 第一个表达式结果false 后面都要执行 直到遇见true System.out.println((5 < 4) | (5 < 3)); System.out.println((5 < 4) || (5 < 3)); //逻辑或: 第一个表达式结果true 其实后面的 表达式就没有必要执行了 System.out.println((5 > 4) | (5 < 3)); System.out.println((5 > 4) || (5 < 3)); //推荐: && || System.out.println(!true); System.out.println(true ^ false); }
6.5 位运算符(了解)
//0 1 //false true System.out.println("--------------------------------"); // & | ^ System.out.println(4 & 7); //需要将数据转换成2进制位执行运算 //0100 //0111 //0100 System.out.println(4 | 7);//0111 System.out.println(4 ^ 7);//0011
6.6 三元运算符
语法: 数据类型 result = (表达式boolean)? 表达式1:表达式2;
使用表达式结果进行判断 true: 执行的是?后面的表达式的逻辑 false: 执行的是:后面的表达式的逻辑 表达式1 与表达式2运算之后的结果类型 必须是相似的 或者是相同的。
获得随意3个整数数据的最值。
public static void main(String[] args) { int a = 10, b = 30, c = 2000; //求最值 // (表达式Boolean)?结果1:结果2; /* int max = (a > b) ? a : b; max = (max>c)?max:c;*/ int max = (((a > b) ? a : b) > c) ? ((a > b) ? a : b) : c; System.out.println(max); //看数据精度最高的类型 double result = ((false) ? 100 : 200.123); }