是一门编程语言。属于高级语言。后端开发(服务端开发 web开发)
编程语言分类:
我们学习java,干什么?----> 编写程序(写代码),开发软件。 (一个软件里面包含很多程序的)
软件分类:
1. 系统软件:windows Linux Mac (C)
2. 应用软件: 基于pc端(J基于浏览器: 京东 淘宝 ) 基于手机端: app
sun公司研发的。 C+±- Oracle
1995 jdk1.0
jdk1.6: 老项目 6-7%
jdk1.7:老项目 6-7%
jdk1.8: 35+% (学习使用)
jdk1.11: 20_% LTS long time server 一直在维护
2020 jdk15 这些版本都是属于过渡的版本。
结合java语言开发程序: jdk java development kit java开发工具包(编写程序)
java语言的4个版本:
javaSE: java 标准版 第一阶段的内容: javaFX+swing PC桌面应用程序(过时)
javaEE:java企业版 2+3阶段技术: web端开发(前端html js +css +后端(tomcat +jsp+servlet))
javaME:java微型版 安卓+嵌入式
javaCard:java卡片 sim卡
相对于其它编程语言而言:(c++):
简洁 简单 易上手
面向对象: 封装 继承 多态
健壮性 : 异常机制 + GC : 垃圾回收的守护线程 (内存溢出)
分布式: 利用jdk提供的api(应用程序接口)调用其它应用的接口。 URL URLConnection Socket
多线程: Thread jvm支持多线程
跨平台: java语言跨平台 (系统)
动态性: 反射
java语言既不属于编译型 又不属于解释型。 利用编程语言编写程序: 运行特征(先编译后解释)
C C++ 编译型语言。 自动编译 直接执行 (二进制的文件的)
html 解释型语言 需要浏览器解释运行
jdk: 编写代码(java程序 java)
jre: 程序的运行在虚拟计算机里面执行的,虚拟计算机里面所有的文件属于二进制的。
手动编译java文件(程序) 运行编译之后的文件(字节码文件 class)
java runtime environment java运行环境 (程序运行)
jvm: java virtual machine java虚拟机(加载二进制的文件,肯定编译之后的文件)
java程序的真正的运行时在jvm (jvm只加载class文件)
程序的运行在计算机里面执行的,计算机里面所有的文件属于二进制的。
文本文件:(乱码)
符编码格式(字符集): UFT-8 gbk latin unicode
本机是否提供jdk环境: dos命令检测。win+r cmd —> java
1. 安装开发环境 jdk
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
2. 配置运行环境
2.1 在path: jdk的bin目录 C:\Program Files\Java\jdk1.8.0_261\bin
2.2 后面学习中: 手动开启服务器tomcat
必须依赖JAVA_HOME: jdk的根目录 C:\Program Files\Java\jdk1.8.0_261
在path: jdk的bin目录 %JAVA_HOME%\bin
3. 编写代码(普通文本编辑器)
***.java (文件名: 大写驼峰 HelloWorld.java)
4.运行程序
4.1 找到java文件的所在文件
4.2 手动编译源文件 把java文件编译出来class文件 javac java文件
javac HelloWorld.java
4.3 jvm加载class文件 java class文件名称 java HelloWorld
演示:cmd中运行结果
C:\Users\DELL\Desktop>javac HelloWorld.java
C:\Users\DELL\Desktop>java HelloWorld
第一天学习java
12345
public class HelloWorld{
//单行注释: 解释说明
//类名: 规范: 类名必须与文件名一致 类名:大写驼峰
//任何注释都是不参与编译的。
//程序执行入口: 程序运行在jvm里面(只认识main)
public static void main(String[] str){
//程序运行的逻辑
//简单打印(jdk提供的api)
System.out.println("第一天学习java");//结束
System.out.println(12345);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wzAWdOwk-1603610527265)(pic\jdk.png)]
1.单行注释 //
2.多行注释 /* */
3.文档注释(解释类 解释方法)
/**
*@className: HelloWorld
*@descrption:
*@author: 张三
*@date: 2020-01-01 12:00:00
*@version:0.1
*@since: jdk1.8
*/
集成开发环境: IDEA 70+% (社区版 最终版(收费))
Eclipse 20+% (开源 免费的)
MyEclipse
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZYcq0n8H-1603610527267)(pic\font .png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TiXM9G2z-1603610527269)(pic\src .png)]
package: 包
1.区分重名的java文件
2.分层。 MVC+三层 com.javas.dao
包名全部小写: 公司域名的后缀名+公司名称+项目名称+木块名+其它 com/cn/org/edu.javasm.demo.*
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VnWIg0Aj-1603610527272)(pic\TEMPLATE.png)]
统一字符编码格式。 有可能会产生乱码。 UTF-8
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m9prlH3v-1603610527273)(pic\encoding .png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t1mr0F4C-1603610527275)(pic\code .png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o7Lr26YX-1603610527276)(pic\color.png)]
一个项目就是一个新的窗口。
在学习期间,推荐一个窗口有多个项目(module)—>一个project多个module
包括(类,接口,枚举类,注解)
String 字符串
string+基本类型: 字面量数据类型
类型 | 字节 | 取值范围(二进制) | 取值范围(十进制) | 默认整数值 |
---|---|---|---|---|
byte | 1个字节 | -27~27 -1 | -128~127 | 0 |
short(短整型) | 2个字节 | -215~215-1 | -32768~322767 | 0 |
int(整型) | 4个字节 | -231~231-1 | -2147483648~2147483647 | 0 |
long(长整型) | 8个字节 | -263~263-1 | -9223372036854775808~9223372036854775807 | 0 |
类型 | 字节 | 负数取值范围 | 正数取值范围 | 默认值 |
---|---|---|---|---|
float(单精度) | 4个字节 | -3.4E38~-1.4E45 | 1.4E45~3.4E38 | 0.0 |
double(双精度) | 8个字节 | -1.7E308~-4.9E324 | 4.9E324~1.7E308 | 0.0 |
类型 | 字节 | 取值范围(无符号数) | 字符编码 | 默认值 |
---|---|---|---|---|
char | 2个字节 | 0~65535 | Unicode字符集(万国码) | ''空字符(\u0000) |
所占内存: 字符编码格式 GBK: 2个字节 UTF-8: 3个字节
类型 | 字节 | 取值范围 | 默认值 |
---|---|---|---|
boolean | 1个字节 | true/false | false |
内存里面每个数据的标识。通过变量定义不同类型的数据。
1.全局变量
[访问权限修饰符] [普通修饰符] 数据类型 变量名称 = 数据;
2.局部变量
[普通修饰符] 数据类型 变量名称 = 数据;
变量名称规范: 小写驼峰 studentName 见名知意
//1.定义变量(初始化局部变量)
String studentName = "张三";
// int num = 20;
int studentAge = 20;//默认类型int -128-127
char studentGender = '男';
double studentScore = 80.5;
boolean isGoodStu = true;
//1.1 声明变量
int num;//0.0
//1.2 赋值
// num = 20;
//2.使用局部变量(这个变量必须初始化)
System.out.println(studentName);
System.out.println(studentAge);
System.out.println(studentScore);
studentAge = studentAge + 1;
基本/引用数据类型(层级) 之间都有可能会出现类型转换。
基本数据类型(数值型+单字符): byte–>short–>char—>int -->long—>float—>double
1.自动类型转换
前提:
精度低的转换精度高的类型。
int num = 100;
double dou = num;
char ch = 97;//a
int ch_num = ch;
System.out.println(dou);
System.out.println(ch_num);
2.强制类型转换
前提:精度高的转换精度低的类型。(数据溢出 数据丢失)
//2. 手动强制转换
double dou1 = 100.65324532;
// 目标类型 变量 = (目标类型)源类型;
long lon = (long) dou1;
System.out.println(lon);
int num1 = 345;
byte by1 =(byte) num1;
System.out.println(by1);
short s1 =9000;
short s2 =9000;
short s3 = (short)(s1+s2);
System.out.println(s3);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JEF3FARH-1603610527277)(pic\内存存储 .png)]
通过变量定义了不同类型的数据 数据与数据肯定要执行相关的运算。
1. 算术运算
+ - * / %模运算 取余数
++ 自增+1 -- 自减-1 +拼接(字符串)
2. 赋值运算
= += -= /= *= %=
public static void main(String[] args) {
//算术/赋值运算符
int num = 10;
num += 10;// num = num+10;
System.out.println(num);//20
num *= 6;//num=num*6;
System.out.println(num);//120
num /= 2;
System.out.println(num);//60
num -= 100;
System.out.println(num);//-40
num %= 3;// num = num%3
System.out.println(num);//-1
System.out.println("-----------------------------");
//++ --
int a = 20;
int b = a--;
System.out.println(a);//19
System.out.println(b);//20
b = --a;
System.out.println(a);//18
System.out.println(b);//18
int x = 100;
// x = ++x;
// for (int i = 0; i < 100; i++) {
x = x++;
// }
//变量缓存机制
int temp = x;//100
x++;
x = temp;
System.out.println(x);// 100
// +
System.out.println("a"+(100+200+300));//
System.out.println(100+200+300+"a"+200+100);//
// System.out.println("用户的余额:"+banlance);
}
3. 比较运算符(boolean)
> < >= <= != ==
==: 2个变量参与比较(比较的内存地址值)
public static void main(String[] args) {
//比较运算符
int num = 100;
short s = 100;
System.out.println(num==s);//内存地址值 true
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s1==s2);//内存地址值
System.out.println(s2==s3);//false
// 理论上来说: 数据一样 变量相比较应该true 比较数据 equals(变量)方法
System.out.println(s2.equals(s3));//比较数据
}
4.逻辑运算符(boolean) --->(多个表达式)
& && 逻辑与
| || 逻辑或
! 获得相反结果
^ 异或
//逻辑运算符
System.out.println((5>4)&(5<3));
System.out.println((5>4)&&(5<3));
System.out.println((5<4)&(5>3));// 后面的都会参与运算
System.out.println((5<4)&&(5>3));//&& 第一个表达式false 后面的表达式不执行了 推荐使用
5. 三元运算符
public static void main(String[] args) {
//三元运算符(非常推荐)
// 语法: 数据类型 变量 = (表达式boolean)?表达式1:表达式2;
// 表达式1/2: 类型尽可能一致(如果不一样 获得精度较高的)
double result = (5 > 4) ? (100 + 200) : (100.0 * 2);
System.out.println(result);
//获得3个整数变量的最值
// int num1 = 100;
// int num2 = 10;
// int num3 = 1000;
int num1 = 100, num2 = 10, num3 = 1000;
int max = (num1 > num2) ? num1 : num2;
max = (max > num3) ? max : num3;
System.out.println("最大值:" + max);
// System.out.println("最小值:" + min);
}