1.Java概述
1.1 是什么
Java起源于Sun公司,1995年诞生,高级语言,2009年被Oracle收购
Java之父:James Gosling
oak:橡树
1.2 发展史
1995年,1.0版本
2004年,1.5版本 --》里程碑版本,增加了很多新特性,比如增强for、泛型、可变参数、枚举、包装类等等;版本命名的改变
2006年,1.6版本 —》
J2SE ----》JavaSE
J2EE ----》JavaEE
J2ME ----》JavaME
2011年,java7
*2014年,java8 ====》里程碑版本,新增了一些实用且重要的特性*
java9、java10 ===》时代的眼泪,一瞬即逝
2019年9月17日:java13
2020年3月17日:java14
2020年9月15日:java15
2021年3月16日:java16
1.3 Java vs C++
- Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,C++ 为了兼容 C 即支持面向对象也支持面向过程。
- Java 通过虚拟机从而实现跨平台特性,但是 C++ 依赖于特定的平台。
- Java 没有指针,它的引用可以理解为安全指针,而 C++ 具有和 C 一样的指针。
- Java 支持自动垃圾回收,而 C++ 需要手动回收。(C++11 中引入智能指针,使用引用计数法垃圾回收)
- Java 不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++ 支持多重继承。
- Java 不支持操作符重载,虽然可以对两个 String 对象支持加法运算,但是这是语言内置支持的操作,不属于操作符重载,而 C++ 可以。
- Java 内置了线程的支持,而 C++ 需要依靠第三方库。
- Java 的 goto 是保留字,但是不可用,C++ 可以使用 goto。
- Java 不支持条件编译,C++ 通过 #ifdef #ifndef 等预处理命令从而实现条件编译。
1.4 优势
世界java看中国,中国java看阿里
-
就业岗位非常多
-
Java在众多语言中稳居No.1
-
Java体系很丰富:JavaEE、安卓、大数据 ===》Java基础都要学
-
Java本身语言方面有一些特点:学起来比C简单一点,尤其是指针;Java垃圾自动回收;跨平台
1.5 能干什么
-
JavaSE【Java Standard Edition】:针对桌面应用,但是Java不太擅长,C家族更擅长一些
Java常用的关系型数据库有:mysql、Oracle、PostgreSQL
-
JavaEE【Java Enterprise Edition】:针对服务器端开发,即企业开发,比如:淘宝、京东等电商网站;携程、途牛等旅游网站;招行,ICBC、ABC等银行网站;选课、宿舍管理等管理系统
-
JavaME【Java Mobile Edition】:有点像Andriod,嵌入式
-
大数据开发:大数据大部分组件源码使用的都是Java语言开发的
2.搭建Java开发环境
2.1 下载并安装
官网下载:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
安装参考:傻瓜式
https://baijiahao.baidu.com/s?id=1630229511923551996&wfr=spider&for=pc
安装的时候:建议非中文、非空格目录
2.2 验证
验证这么几个命令:
java
javac
java -version
2.3 安装目录的解释
2.4 JDK/JRE/JVM三者关系
JDK【Java Developmen kit】:java开发工具集,包含JRE+开发人员使用的工具
JRE【Java Runtime Envoriment】:java运行时环境,包含JVM+运行时需要的类库
如果你仅仅是运行java程序,只需要安装JRE即可
JVM【Java Virtual Mechine】:Java虚拟机,是我们java程序运行时假象的计算机【类似VMWare】,是java程序实现跨平台【跨操作系统】的重要支撑。
跨平台:任何软件的运行,都必须在OS之上,所以我们编写的程序之所以可以在任何操作 系统之上运行,就是因为,在不同的操作系统上,提供了不同的JDK【实际上是通过JVM实现的跨平台】。
2.5 cmd常用命令
切换盘符:盘符:
---->linux没有盘符之说
本盘符下切换路径:cd 文件夹名称
----》 cd /opt/....
回到上一级:cd ..
----》cd ..
cd -:回到上次的目录
cd ~:回到home目录
列出当前目录下的文件或文件夹:dir
—》ls -a
简写ll
创建目录:mkdir 目录名称
----》mkdir 目录
mkdir -p /目录1/目录2
删除目录:rmdir 目录
----》 rm -rf 多级目录:递归删除,且没有提示
创建文件:touch 文件名
3.HelloWorld
3.1 编写Java程序三步走
- 编写源程序:即扩展名为
文件名.java
-----> 给开发人员看的 - 编译【翻译】:即将
文件名.java
,编译为文件名.class
---->给JVM使用 - 运行:即执行
文件名.class
3.2 编写Java源代码
-
创建一个文本文件
HelloJava.txt
,修改后缀名为.java
Tips:若没有扩展名,需要将其显示出来
-
使用记事本或者
notepad++
打开 -
编写代码
public class HelloJava { public static void main(String[] args) { System.out.println("HelloJava"); } }
注意:①文件名必须是HelloJava,即保证文件名跟类名一致;
②每个符号【大括号、小括号】都是成对出现;
③public static void main(String[] args)
主方法写法固定;
④System.out.println("HelloJava");
该语句就是我们要执行的语句,引号中的内容可以改变
3.3 编译
调出cmd窗口,执行如下命令
javac HelloJava.java
3.4 运行
cmd窗口中,执行如下命令:
java HelloJava
注意:执行过程中,不能加文件的扩展名
3.5 HelloWorld说明
3.5.1 编译和运行两码事
- 编译:这个过程,由
javac
帮我们检测你的源代码有没有问题,若有问题,则编译不通过。
- **运行:**将
.class
文件交给jvm去执行
3.5.2 关于main方法
- main方法是程序的入口,跟c中的一样
- main方法四要素固定:
public
、static
、void
、String[] args
,args的名称可以改,一般我们不该 - main方法中的语句支持自定义,
System.out.println("HelloJava");
4.注释
要求:写代码养成良好的注释习惯 【为己为人】
注释:不会影响我们代码的运行
4.1 注释的好处
- 注释就是我们对代码的解释和说明,目的是让我们一目了然的知道代码的作用
- 可以帮助我们去调试程序【某行代码可能有问题,可以注释掉,后面在打开,而不是直接删除】
4.2 注释的分类
- 单行注释:
//注释内容
- 多行注释:
/*注释内容*/
- 文档注释:
/**注释内容*/
可以使用javadoc
命令生成一个文档【了解】
javadoc -d aa -version -author HelloJava.java
5.反编译
知道有这么个东西即可,可以使用
jd-gui.exe
,后面的学习过程中,也可以使用命令
反编译:.class
是一个二进制文件【除了文本文件之外,比如class文件,图片、音频、doc】我们直接用记事本工具打开,看不懂,期望的是将其反编译成我们的能够看懂的
.class ----> .java
6.变量
6.1 关键字
关键字:在java中,已经定义好的单词,具有某些特殊含义
- 比如,我们的HelloJava中的,出现的有:
public
、class
、static
、void
- 关键字比较多,不需要记
6.2 标识符
- 标识符:在java中,我们可以自定义的名称,我们都称为标识符。比如:类名、方法名、变量名、常量名等等。
- 命名规则:强制,硬性要求
- 标识符中组成:英文字母(大小写)、数字、
_
,$
- 不能以数字开头
- 不能是关键字,但是可以包含关键字
- 标识符中组成:英文字母(大小写)、数字、
- 命名规范:软性要求,参见《Java开发手册-泰山版》
- 类名:大驼峰规则,即多个单词构成,每个单词首字母大写
- 方法名:首字母小写,小驼峰规则,多个单词构成,第一个单词首字母小写,其余单词首字母大写
- 见名知意
6.3 数据类型
明确一点:在java中,变量的定义,需要限制类型,即限制该变量能保存什么样的数据
Java数据类型分两大类:基本数据类型+引用数据类型【目前掌握一个String】
基本数据类型,分8种:
-
整型:byte【1字节8位 -27~27-1、short【2个字节】、int【4个字节】、long【8个字节】
规律:2位数 ~2位数-1
-
小数[浮点数]:float【4个字节】、double【8个字节】
-
字符型:char【0-65535】
-
布尔型:boolean,该类型的值只有true和false
Java中默认类型:整数int,浮点数double
6.4 变量的定义和使用
明确:
- 变量用于存储数据,在我们的内存中,有一块存储空间
- 定义变量的时候,要限定该变量存储的数据类型
- 在程序运行的过程中,其值可以发生改变
变量定义三要素:数据类型
变量名
变量值
变量定义和使用的步骤方式1:
- 声明:
数据类型 变量名; int score;
- 赋值:
score = 10;
- 使用:可以将该变量值赋值给另一个变量,或者在这种输出语句中。
变量定义和使用的步骤方式2:
- 声明和赋值二合一:
数据类型 变量名=值; int score = 10;
- 使用:可以将该变量值赋值给另一个变量,或者在这种输出语句中。
public class Test01
{
public static void main(String[] args)
{
//double score = 20.999;
//需求:使用变量,输出个人信息:名字、年龄、性别 char 一行输出
//三行输出,只要一个输出语句:我名字:xxx,年龄:11,性别:xx ---->转义字符
System.out.println("我 是张安\n年\t龄10\nssssss");
//变量的基本使用
//1.声明一个变量:在内存中开辟一个存储空间 byte、short、long
int score;
//2.为变量赋值
score = 10;
//3.使用变量
System.out.println(score);
boolean flag = true;
//char c = 'A';
char c = '中';
System.out.println(c);
//注意:在使用float类型的时候,需要加f或F double自己写
float a = 10.2f;
//保存人的名字,上述8种基本类型就无能为力,所以需要我们的引用类型,先掌握一个String
//①""在java中,就是我们字符串类型的一个身份
//②字符串的拼接,可以使用+
String name = "张三";
System.out.println("我的名字叫:"+name);
}
}
6.5 注意事项
- 变量赋值:定义的变量,必须赋值[初始化]才能使用【变量都在main方法中】
- 变量名称:在同一个大括号范围之内,变量不能重名
6.6 转义字符
在java中,转义字符有特殊功效。常用的是:
\n
:换行\t
:制表符,大空格,用于排版
6.7 类型转换
在程序中,有时候会出现类型不一致的情况
6.7.1 自动转换
将一个小类型,赋值给一个大数据类型,自动转换,转换成大数据类型,不会出现精度丢失的问题。
转换规则:byte、short、char ---> int ---> long -->float --->double
6.7.2 强转
大类型赋值给小数据类型,需要强制转换
public class Test02
{
public static void main(String[] args)
{
//数据类型之间的转换
float f = 10.3f;
//将f的值,赋值给double类型
double d = f;
double a = 10.9;
System.out.println(a);
byte bb = 10;
int i = 100;
byte cc = i + bb; //编译能过否?在表达式中,类型会自动提升为大类型
char c = '中';
int b = c;
System.out.println(b);
//将大类型赋值给一个小类型:小数据类型 变量名 = (小数据类型)大数据类型的变量 强转
int e = (int)a;
System.out.println(e);
}
}
6.8 键盘输入
需要使用JDK提供的类【跟System类似】
三步走:
- 引入Scanner:
import java.util.Scanner;
需要在类的上面 - 创建Scanner对象:
Scanner 变量名input = new Scanner(System.in);
- 接收键盘输入:
int a =input.nextInt();
String name = input.next();
7.常量
在程序运行的过程中,其值不能发生改变。π
语法:通过final
修饰
【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
正例:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
反例:MAX_COUNT / EXPIRED_TIME
8.运算符
8.1 算术运算符
注意:a++,++的区别
//1.算术运算符:+、-、*、/、%【取余】 ++ --(笔试,容易搞错)
// ++ :分为a++,++a
// a++,++a的使用说明
// 1.若是独立成一条语句,则二者等效
// 2.若用在输出语句或者其他表达式中,a++,则先用后+1;++a,则先+1,再用
int a = 20;
int b = 6;
System.out.println(a/b);
System.out.println(a%b);
double c = 20.66;
double d = 2.33;
System.out.println(c/d);
System.out.println(c%d);
System.out.println("===============================");
System.out.println(b);
//b++;
//++b;
//System.out.println(b);
//System.out.println(++b);
//System.out.println(b);
//int result = (b++)+(a++)+(++b)+(++a);
//System.out.println(result);
8.2 赋值运算符
结合:11.1 进一步理解
//2.赋值运算符:=,+=,-=,*=,/=,%=
//a = a+1;
a +=3;
System.out.println(a);
8.3 比较运算符
结果:boolean
//3.比较运算符:>、< 、<= 、>=、==、!=
System.out.println(1==1);
System.out.println(1 !=2);
System.out.println(1 >= -1);
8.4 逻辑运算符
结果:boolean
//4.逻辑运算符:&& vs & :与,并且;|| vs | 或;! 取反
//面试:&&(短路与) vs &的区别,实际开发中用&&
//&&:若左边为false,右边不管是哈,都不在参与运算
//&:不管左边结果是啥,两边都会参与运算
//||:若左边是true,右边不管是哈,都不在参与运算
int c1 = 10;
int c2 = 20;
//boolean r = (c1 >= c2) && (++c1 > 15);
boolean r = (c1 >= c2) & (++c1 > 15);
System.out.println(c1);
System.out.println(!r);
8.5 位运算符
位运算的执行效率是最高
经典且古老面试:如何高效的实现2乘以8
//5.位运算符
int aa = 2;
System.out.println(aa << 3); //aa*2^3
System.out.println(aa >> 1); //aa*2^(-1)
System.out.println(-16 >>> 2); //无符号位的运算 ,知道-16如何存储
8.6 三元运算符
语法:数据类型 结果 = 条件表达式?值1:值2
Tips:结果的数据类型,跟表达式后面的值类型一致;三元运算符的结果必须有一个变量来存储或者在语句中使用
//6.三元运算符
int d1 = 20;
int d2 = 10;
System.out.println(d1 >= d2?"最大值:"+d1:"最大值:"+d2);
//String rr = d1 >= d2?"最大值:"+d1:"最大值:"+d2;
9.扩展知识点
9.1 +=符号的扩展
//常见基础笔试题
short s = 1;
//s = s + 1; 编译不过,前面类型转换分析过
s += 1; // +=只运算一次,并且带有强转的特点,等效于 s = (short)(s+1),所以编译ok
System.out.println(s);
9.2 常量和变量的运算
byte b1 = 1;
byte b2 = 2;
byte b3 = 1 + 2; //编译ok,1和2是常量,所以在编译的时候【javac】,已经确定好了1+2的结果,同时结果没有超出byte范围
byte b4 = b1 + b2; //b1和b2都是变量,变量的值可能发生变化,所以在编译的时候,javac不确定b1+b2的结果是什么,所以会将结果以int类型进行处理
System.out.println(b3);
System.out.println(b4);
10.小总结
- Java那几个重要里程碑版本要知道
- Java体系分类:JavaSE、JavaEE、JavaME
- Java的环境搭建:必须熟练搞定
- Java之HelloWord:理解流程【源码—》编译javac—》运行java】,main方法四要素
- 3种注释
- 数据类型2大类:基本【8种】+引用
- 变量的定义和使用
- 常量,跟变量的区别
- 运算符:a++,++a的区别,
&& vs &
11.作业
-
使用三元运算符实现求3个数的最大值
-
键盘输入个人信息【姓名、成绩、是否有offer、性别】,一行输出语句【提交】
姓名 成绩 是否有offer 性别
zs 20.22 Y/N 男/nv
-
IDEA安装好,傻瓜式安装
-
预习:流程控制+数组