知识回顾:
1) java全球第一大语言,91诞生oak,95改名java,强语言,JVM虚拟机
个人之言,VB,delphi;C#(.net)微软抄袭java;2004年java
Python人工智能,作者数学家,自身脚本语言,还不如java速度
Python有移动端吗?Andriod操作系统,谷歌,手机半壁江山,
Python有没有微服务?主流:阿里dubbo框架,SpringCloud微服务全家桶
大数据,亿级以上数据,计算速度上亿数据秒级返回Hadoop离线分析(分钟级别) java、Spark实时计算 scala下一代java,天书编译完成java语句(亚秒级别。0.2s~0.5s)、Storm真实时计算(0.1s)Apache最新版本用java重构
Python好学,小孩都能学,真正玩python算法:高数、离散、概率论
2) JVM、JDK、JRE
JVM java virtual machine java虚拟机,充当一个中间者,屏蔽硬件底层差异,性能会稍有损失,java特性:跨平台
JDK java devepoment kit java开发工具包,lang/util/数学/日期/网络….,基于api工具类代码书写量急剧减少,代码安全稳定极大保障。工具包解决公用的。
JRE java runtime environment java运行时环境。
JDK完全包含JRE,JRE基础包,在JRE上有扩充很多规范,web service 微服务。
3) 环境变量
JAVA_HOME 系统读取环境变量,告诉读取程序jdk所在位置D:\java\env\jdk1.8,只能配置一个
Path/PATH,配置后可以在任意目录中运行:%JAVA_HOME%\bin,。。。。
CLASSPATH,可选,给java用的,eclipse集成开发环境中使用
4) java运行结构
分成部分:
a.)创建编辑源文件HelloWorld.java(纯文本文件,给开发者看的)
b.)编译源文件javac.exe,编译目标文件 HelloWorld.class(二进制文件(字节码文件)jvm,不能直接看,给jvm使用)
c.)运行时,类加载器ClassLoader,加载HelloWorld.class到JVM,分配内存等资源,等待执行,Run Application 运行应用程序,执行入口函数main方法。执行方法体代码
java非常强大,它爹c语言,底层本地方法调用 native,c语法。
录入人员信息
1) 怎么获取键盘信息
2) 熟悉java基本程序结构
分析:
1) 收集什么信息:姓名,年龄,工作单位
2) 键盘Scan输入设备Input(Stream信息流)基于JRE,api工具包类,System.in,输入多个值
3) 输出内容到控制台 System.out.println
关键字(eclipse IDE 紫色)java语言特定单词,这些单词不能开发人员使用
级别:自熟练,少量基本不用
abstract, 抽象
assert, 断言
boolean, 布尔类型
break, 循环,跳出
byte, 字节类型
case, 判断语言,分支
catch, 异常,分支
char, String字符串,字符
class, 类
const, 常量 PI=3.14
continue, 循环,进入下一次循环
default, 默认
do, 循环
else, if判断语句,分支
enum, 枚举
extends, 面向对象,三大特征:继承
final, 最终的,常量 final int age = 18;
finally, 异常,最终结束时要释放资源
double, 基本类型,双精度浮点数,大 0.1
float, 基本类型,单精度浮点数,小
for, 循环,
if, 配置else,判断语句
implements, interface接口,实现
import, 导包
instanceof, 几乎不用,判断实例
interface, 接口
native, 本地,java调用c语言
new, 创建新对象
package, 包,包路径
private, 私有
protected, 保护
public, 公用
return, 返回
int, 基本类型,整数类形,小
long, 基本类型,长整形,大
short, 基本类型,短整形,更小
static, 静态
strictfp, 精确浮点,基本不用
super, 父子结构,代表父类
this, 代表自身,代表当前,看上下文
switch, case多重判断,
synchronized, 同步,同步锁,多线程,线程安全
throw, 异常,抛出异常
throws, 异常,抛出异常
transient, 多线程,线程共享,一般用不到
try, 异常,try{}catch{}finally{}
void, 返回值,没有返回值
volatile, 多线程,线程可见性,一般用不到
while 循环 for/do/while
保留字
byValue,
cast,
false, 布尔值,true真/false假
future,
generic, 泛型
inner, 内部类
operator, 操作
outer, 外部
rest,
true, 布尔值,真
var, JavaScript网页,脚本语言,不能操作服务器端
goto, 转向语言,结构化,废弃
const,
null 空,空指针异常
关键字、保留字不允许我们去声明使用!
自己起的名字:标识符
起错名称Eclipse报错
Java八种基本类型:
1) boolean 布尔类型,两值:true真非0(1)、false假(0)默认值:false
2) char 字符类型 aw、09,默认值:空格
3) byte 字节类型,很小整数范围,2^8 -128~127,默认值0
4) short 短整形,比btye大,比int小。2^16 65536,默认值0
5) int 整形,2^32,默认值0
6) long 长整形,2^64,默认值0
7) float 单精度浮点数,带小数2^32,默认值0.0
8) double 双精度浮点数,带小数2^64,默认值0.0
【死记】八种基本类型有从属四种类型:布尔boolean、字符char、整数(byte、short、int、long)、浮点(float、double)
变量类型,存储简单的数据
八种基本变量都有初始值,对象的变量初始值null
//最小值
byte bMin = Byte.MIN_VALUE;
//最大值
byte bMax = Byte.MAX_VALUE;
System.out.println(“byte 最小值:” + bMin + " 最大值:" + bMax);
计算机0,1,字节8bit,8个0或者1
类型名称 字节空间 默认值 取值范围
整数型 byte 1 0 -27到27-1 或者 -128到127
short 2 0 -215到215-1
int 4 0 -231到231-1
long 8 0L -263到263-1
浮点型 float 4 0.0f 单精度,对小数部分的精度要求不高
double 8 0.0d 双精度,精确的小数部分并操作值很大时
字符型 char 2 空格 0到65535
布尔型 boolean 1 false 真true 假false
它们就是内存空间占用大小表现,声明一个变量,这个类型的变量占几个字节。
占的多好,还是占的少好呢?内存是稀缺资源,尽量少占内存。
典型电商中超卖现象?
小米100万台,上去用户几百万人。
高并发,大家都在抢,count商品计数,每个抢到的人,对这个数字来说
都要减一,count=1,count=0,count=-1,count=-2
卖多了,100w,102w+2台
限制,时间,过一段时间,过一段时间取消。
秒杀,怎么设置时间呢?
业务需求:设置7天,过期时间
7天=?秒
值交换
a=10,b=20
交换
a=20,b=10
思路:
把其中一个值暂存起来,多一个中间临时变量
byte a = 10;
int t1 = a; //内部进行类型转换,隐式转换,a变成int正
//把这种情况也成为自动类型转换
int b = 2000; //业务的逻辑错误,跟我们想的一样吗?不一样
//运行后才知道错误。
byte t2 = (byte)b;
//把大的放在小的,一种可以存放,可能值超过存储范围,不能存储
//如果我知道业务值是不会超过byte范围时,必须显式转换
//也称作强制转换
System.out.println(t2);
结论:
1) 小的空间转成大的空间类型,可以
2) 大的空间转换小的空间类型,也可以,(强制转换),风险大
运算符
±*/%…
System.out.println(3 % 2); //奇数
System.out.println(4 % 2); //偶数
++自加(新闻文章数、帖子数)、–自减(秒杀商品、购票)、java独有
算术运算符 + - * / 基本运算
% 取余数,求模,算整除
++ – 自增 自减
比较运算符 == 相等比较
!= 不等比较
连接运算符 + 字符串连接 “abc”+”xyz”=”abcxyz”
逻辑运算符 && & 逻辑与(短路与),两边同为真结果才为真
|| | 逻辑或(短路或),两边只要有一个真结果就是真
! 非,非真是假,非假是真
三元运算符 c ? x : y 三项运算 c?x:y c是真取返回x,是假返回y
赋值运算符 = 赋值运算
+=、-=、*=、/= 复合的赋值运算
a+=2; 等价于 a=a+2 写法简洁
优先执行 ( )小括号 小括号中的先执行
x+y+z = 按顺序相加x+y+z
x+(y+z)= 优先括号内的先执行y+z+x
三元运算符(三目)java语言唯一一个
条件表达式 ? true : false
例子:
X = 300;
Y = 200;
X>Y ? 1:0
有3个值,求最大值
A = 10
B = 50
C = 30
利用三目表达式如何求最大值?
package javase.base;
public class TestMax {
public static void main(String[] args) {
// //有3个值,求其中最大值
// int a = 90;
// int b = 50;
// int c = 30;
//
// //分两步利用三目表达式实现,引入中间变量
// int t = (a>b)?a:b;
// int r = (t>c)?t:c;
//
// System.out.println(“max=” + r);
int a = 78;
int b = 88;
int c = 60;
int t = (a<b)?a:b;
int r = (t<c)?t:c;
System.out.println(r);
}
}
对于一个开发人员的调试bug?
菜鸟和老鸟,多年工作经验开发者差异在哪里?
如果程序出现bug,错误,老鸟,可以快速定位错误原因,
并且立刻改正错误。
秘诀:
1) 收集bug集,形成一个文档,
2) 记录出错信息
3) 解决,错误原因,及解决办法
工作中就那么多bug.
package javase.base;
public class TestMax {
public static void main(String[] args) {
//利用断点技术
//观察程序执行每一步的当前值
//1.断点设置:在要观察代码的最前面双击出现断点
//2.运行状态:Run方式(断点不生效)、Debug方式
int count = 100;
count–;
count–;
count–;
System.out.println(count);
}
}
Java语法
1) 关键字,java语言它自身一些关键信息表达,是固定,不可变化的。习惯小写。我们起名时就必须不能和关键字冲突,eclipse是有提示。
2) 保留字,开发者起名时也不能使用。规定这些保留字可能以后的java版本使用。留作扩展。goto
3) 标识符,关键字和保留字都是java自身提供的;标识符是开发者自己起的名字。
规则:能否数字开头,不能,否则支持-号,也不行。
byte b = 0; int i =0; long l = 0.0; 大多数时要求:见名知意 name,age,school
4)java类型,两种:基础类型(8种)、引用类型(String、类、接口、抽象类、对象、数组。。。)
5)8种基本类型:boolean布尔类型、char字符类型、byte字节类型、short短整型、int整形、long长整形、float单精度浮点数、double双精度浮点数
4类型:布尔类型、字符类型、整形、浮点数
boolean、int、long、double
原则:设计时尽量用比较占内存空间比较小的类型
包装类型(引用类型)
每个基本类型都对应有一个包装类型
原则:在方法内部,尽量使用基本类型;用完就释放。
在对象结构中,要尽量使用包装类型。类型pojo。一般不允许使用基本类型。
Boolean
Char
Byte
Short
Integer
Long
Float
Double
5) 运算符
a) % 取余 3%2余数为1, 8%2余数为0
b) ++自加(新闻文章数、博客文章数、论坛帖子数)、–自减(商品数量)
c) 三目 (条件表达式)?结果真:结果假,java世界中独一个
6) 断点调试
两个步骤:
a) 设置断点
b) 运行Debug模式
单步调试:F6
直接执行到下一个断点,或者执行完成F8