Java的起源和发展
创始人:詹姆斯 高斯林
诞生公司:sun公司
现在公司:oracle公司
LTS(long time support)版本:又叫长期支持版本(8/11/17)
Java的平台版本
JavaSE(Java标准版):主要用于PC应用的开发
JavaME(Java微型版):主要用于移动设备嵌入式设备开发 ,安卓,是用Java开发的
JaveEE(Java企业版):主要用于企业级应用的开发(CRM、OA、政府、银行的管理系统)
软件
什么是软件,软件就是程序和数据的结合体
程序
什么是程序:是用来处理数据的计算机指令的集合
编程语言
什么是编程语言:是用来书写计算机指令的语言
编程语言的发展史
机器语言:由0和1两个数字组成,它是计算机唯一能够直接识别的编程语言。
它有优缺点
优点:程序的执行速度快
缺点:可阅读性低、可记性低、可移植性低、可维护性(拓展)低
汇编语言(又叫低级语言):
加入了助记符(帮助记忆符号),提升了代码的可读性,降低了代码的记忆难度
高级语言:
高级语言更加符合人类的习惯
翻译过程:
一个是编译一个是解释
编译:将源代码,经由编译器一次性翻译(编译)成目标代码文件(由机器怨言组成的文件二进制文件),以后执行程序时,执行目标代码文件(C、C++编译型语言)
解释:将源代码,经由解释器逐行解释(翻译),得到结果,以后每次执行都是执行源代码文件(JavaScript解释型语言)
两种翻译过程的区别:
1、运行速度,编译是一次性将我们的源代码文件翻译为目标代码文件,以后执行都是执行目标代码文件,运行速度相对快;解释是在解释器中逐行翻译源代码,每次执行都需要重新翻译一次,运行速度相对慢
2、跨平台,编译产生的目标代码文件是针对平台而翻译出的,因此编译无法做到跨平台;解释是直接在不同平台的解释器中去运行
标识符:
标识符是打上标记帮助识别的符号
给Java中的类、方法、变量和常量等的名称
标识符的命名规则(语法层面)
1、标识符的组成,由数字、字母、下划线(_)、美元符号($)
2、不能以数字开头
3、严格区分大小写
标识符的命名规范
类名:首字母大写,如果类名由多个单词组成,后续单词的首字母大写(Hello World 大驼峰命名法)
方法名/变量名:首字母小写,如果方法名/变量名由多个单词组成,后续单词的首字母大写(hello World 小驼峰命名法)
常量:所有字母全部大写,如果常量名称有多个单词组成,单词与单词之间用下划线(_)分割(HELLO_WORLD 蛇形命名法)
见名知意 (看见名字就知道意思) :可以用单词或汉语拼音全拼,建议用单词,英语差的也可以用百度翻译。
标识符的分类:
语言预定义:标识符---关键字(50个左右),它们都有特殊含义
用户自定义:标识符分为先人(这里的先人是先前的先辈们写的)自定义标识符和开发者自定义标识符
基本概念和语法
注释:用来描述代码的功能,起提示作用,在Java编译器编译Java文件时,会忽略注释
注释有三种:
// 单行注释 , 快捷键ctrl+/
/**/:多行注释
/** 文档注释 */ :一般情况下,在类、变量、常量和方法上 javadoc 命令生成API文档(字典)
类的基本结构(类的定义)public class 类名{ }
1.public修饰符的类名必须和文件名相同
2.修改文件名 鼠标右键选择refactor进行重新修改
数字在计算机中的存储
为了负数的存储,会将二进制数的最高位设置为符号位
0正数 1负数 一个字节能够存放的数据-128——127
在内存中数据的存储都是补码进行存储
原码:十进制数转为二进制后的数就是原码
反码:以原码为基础,符号位不变,其余位取反(0->1 ,1-0)
补码:在反码的基础上加1 注意:正数的原码、反码、补码都一样
数据类型
数据类型的作用:告知计算机以何种方式存储数据,告知计算机开辟多大的空间存储数据
分类:基本数据类型(4类8种)和引用数据类型()String--字符串
整型:byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节)
浮点型:float(4个字节、单精度浮点数)、double(8个字节、双精度浮点数)
字符型:char(2个字节)、字符在计算机中依然是以二进制进行存放,为了更好的存储字符,为全世界的符号的统一进行了编码(万国码、unicde码),最终以数字编码来表示字符,48-57:0-9、65-90:A-Z、97-122:a-z
布尔型:boolean无固定字节,由JVM虚拟机决定,表示逻辑状态。只有两个取值:true(真) false(假)
变量声明语法:数据类型 变量名
变量的本质:在内存中划分的空间用来存储数据,数据在程序运行过程中允许修改的
常量声明 :final 数据类型 常量名 = 常量值
常量定义好,不可被修改的量
注意:养成先申明在使用,声明的同时初始化的习惯,数据类型 变量名 = 变量值;
变量名是标识符,首字母小写,如果有多个单词组成,后续单词的首字母大写
变量的生命周期,始于声明,终于离它结束最近的花括号
运算符
算数运算符 + - * / %(求余), 在Java中两个整数做除法,结果为整数
数据参与运算时,结果会自动转换为参与运算的数据类型中精度更高,空间更大的类
赋值运算符 =(赋值) +=(加赋值) -=(减赋值) *=(乘赋值) /=(除赋值) %=(求余赋值) ++(自增) --(自减)
++或-- 放在变量前,该变量会先自增(减),在做运算
++或-- 放在变量后,该变量会先参与运算,在做自增(减)
比较运算符 > < >=(大于等于) <=(小于等于) ==(等于) !=(不等于)
三目运算符 布尔表达式 ? 数据1 :数据2
运算结果为布尔值的算式 叫布尔运算符
布尔表达式 结果为真 ,可以返回 : 前的数据(表达式运算结果),结果为假返回 : 后的数据(表达式运算结果)
逻辑运算符
&&:并且
布尔表达式1 && 布尔表达式2 结果都为真, 则表达式则整体结果为真 ,只要有一个为假,都是假
||: 或
布尔表达式1 || 布尔表达式2 只要有一个为真,则表达式整体为真,只要有两个表达式都为假,就是假
!:非
! 布尔表达式,非假为真,非真为假(真的就是假的,假的就是真的)
^:异或
布尔表达式1^布尔表达式2 ,如果布尔表达式1和布尔表达式2结果为一真一假 ,则整体都为真,两真两假都是假
短路与非短路运算符
短路 && || :第一个布尔表达式能够决定整体结果时,第二个布尔表达式就不会执行
非短路 & | :不管第一个结果如何,第二个表达式都会执行
数据类型转换
自动类型转换:发生在运算符两端数据类型不一致时
两个整数做运算时,结果默认是int类型的数据
口诀:小(字节)转大 ,低(精度)转高
byte , short , char < int < long < float < double
在转换时,整型与整型之间的转换,考虑字节,整型和浮点型转换会考虑精度 ,boolean不参与数据类型转换
强制类型转换:发生在对数据有要求时,利用强制类型转换的语法对数据类型进行转换,可能会出现的精度丢失的情况
强制类型转换语法: (目标数据类型)数据
口诀:大(字节)转小 ,高(精度)转低
输出语句
System.out.println(数据) 系统输出打印换行语句
System.out.print 系统输出打印语句
String 字符串(引用数据类型):相当于多个字符进行串联,使用双引号进行包裹
字符串的拼接 + 做连接
字符串在前,先做字符串的拼接
字符串在后,先做运算再把运算结果与字符串做拼接
转义字符:\字符,可以把原本具有特殊含义的字符,转换为普通字符。 \':单引号 \":双引号 \n:换行
输入语句
1.声明一个输入器
数据类型 变量名 = 变量值
Scanner scan = new Scanner(System.in);
import java.util.Scanner;
public class Scanner {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int nnumber = scan.nextInt();
}
}
声明整型变量结束输入器的信息
算法
什么是算法:算法是解决问题的方法或步骤
有穷性:一个算法必须在执行有限个操作步骤后终止
确定性:算法每一步的含义必须是确切的,不可出现任何二义性
有效性:算法中的每一步操作步骤都应该有效执行,一个不可执行操作
有零个或多个输入:输入是指在算法开始之前所需的初始数据,这些输入的多少取决于特定的问题
一个或多个输出:输出是算法执行得到结果,在一个算法中至少一个结果,如果没有输出,它就毫无意义
分支语句
if 语句
单分支 if 语句
条件表达式:本质是布尔表达式(结果为布尔值)
执行顺序:先做条件判断,判断结果为真,进入if 语句执行
if (条件表达式){
语句块
}
双分支if语句
if(条件判断){
语句块1
}else{
语句块2
}
执行顺序:先做条件表达式判断,如果为真,就会执行语句块1;如果为假,就会执行语句块2
多分支if语句
if(条件表达式1){
语句块1
}else if(条件表达式2){
语句块2
}else if(条件表达式3){
语句块3
}
.......
else{
语句块n
}
switch语句
switch - case
switch (表达式){
case 数据1 :语句块
break
case 数据2 :语句块
break
case 数据3 :语句块
break
case 数据4 :语句块
break
default : 语句块
break
}
顺序:计算表达式结果,把结果和case后数据对比,比较成功,就会执行case后的语句块内容, 如果全部不成功,执行default后的代码块 注意:switch (可以放 byte、short、int、char、String类型的值)
if switch 的区别:
if 在做比较时,可以比较值也可以比较范围 == >= <= ,switch语句,只能比较值
if 语句在进行比较时,只能接收布尔值,switch语句,可以接收byte、short、int、char、String类型的值
循环
循环:重复执行某些含有规律的指令语句过程
循环是由反复被执行的循环体语句和循环终止条件共同组成
循环语句
for循环
使用于明确知道循环次数
一般情况下必须个三个表达式,有些特殊情况可以省略其中的表达式
for(表达式1 ; 表达式2 ; 表达式3 ){
循环语句
}
代码执行顺序:
先执行表达式1(通常用于计数变量的声明,计数变量是用于计算循环次数的变量)
表达式2(书写循环终止的条件)判断,如果判断结果为真,循环继续
3 执行循环语句(用于改变计数变量的值)
4 执行完循环语句后,执行表达式3(用于改变计数变量的值)
2 > 3 > 4 > 2 >3 > 4 > 2 直到2判断结果为假就结束
while
使用不知道循环具体次数,只知道达到某个条件的时候循环结束
while (条件表达式){
循环语句
}
顺序:先做条件表达式判断,判断为真,执行循环语句内容,执行完成,再做条件表达式判断,如果判断为真继续,为假终止循环 注意:和for循环不同的是while循环没有专门用于计数变量的声明以及计数变量值改变指令
do-while
使用不知道不循环具体次数单至少执行一次,只知道达到某个条件循环结束
do{
循环语句 重复被执行的代码
}while (条件表达式);
执行顺序:先执行循环语句内容,然后在做条件表达式判断,判断结果为真,在执行循环语句内容,判断为假,循环终止
循环分类
先验循环:首先执行条件表达式判断,后执行虚幻语句的循环 for 、while
后验循环:先执行循环语句,后执行条件表达式判断循环 do-while