JAVA学习 Day1
Java介绍入门、变量
1. Java介绍
Java之父:詹姆斯·高斯林。
Java:
服务器端开发 B/S
Tomcat MySQL (软件)
Linux Window MacOS (系统)
1993 - Oak
1995 - 面向市场 - 跨平台
JDK - Java Development Kit 开发工具
工具:java、javac、javadoc…
JRE
JRE - Java Runtime Environment 运行环境
工具:java
类库:Library + 写好的代码
JVM
JVM - Java Virtual Machine 虚拟机(实现跨平台的工具)
不能独立安装
电脑可以识别java工具
bin -> java的开发工具 java\javac\javadoc\jar…
conf -> 配置文件
lib -> jar包(字节码文件打包而成)
2.控制台版的JAVA HelloWorld
编辑文件:HelloWorld.java
代码:
// 单行注释
/*
多行注释
*/
/**
文档注释
*/
// HelloWorld.java
/*
一个文件中最多只能有一个public修饰的类
可以有多个类
public修饰的这个类,名字必须和文件名相同
*/
// public: 修饰词 - 修饰的是class
// class: 类 - 文件
public class HelloWorld {
// 程序入口 - 主方法main - 固定写法
public static void main(String[] args) {
// 要执行的代码第一行
// 打印一句话
System.out.println("Hello World!");
}
}
编译:用到javac工具 - cmd win+R
电脑终端(CMD)执行命令:
1.先在所在目录查找命令
2.去环境变量指定目录中寻找
运行java时提示,不是内部或外部可执行命令:
解决方案:
1.进入到工具所在目录 - 治标不治本 - 不推荐
cd -> 切换目录
d: -> 切换盘符
javac -> 编译工具
2.修改环境变量
我的电脑 -> 右键 -> 属性 -> 高级 -> 环境变量
path %JAVA_HOME%\bin
新建变量:JAVA_HOME
值:jdk安装目录 jdk9.0.4
运行java时提示,类无法执行或找不到类:
解决方案: 我的电脑 -> 右键 -> 属性 -> 高级 -> 环境变量
删除之前配置过的CLASSPATH(我的原因是因为之前有安装过eclipse 所以配置过CLASSPATH文件路径,导致命令找不到桌面的java文件)
3.变量
java变量:
jvm内存中分配了一块空间,存储数据
变量使用:
1.声明/定义 - 类型 变量名
2.初始化 - 第一次赋值
命名规则:
1.只能出现:英文 + 数字 + _ + $
2.不能以数字开头
3.变量名:可读性好、首字母小写、第二个单词开始首字母大写
类型:
2种数据类型:基本数据类型 + 引用类型
基本数据类型:8种
整型:byte、short、int、long
浮点型:float、double
字符型:char
布尔:boolean
基本单位:1 字节 = 8位
java虚拟机中存储基本数据类型的格式:二进制补码
20
0 001 0100
-20
原码:1 001 0100
反码:1 110 1011
补码:1 110 1100 - JVM
3.1 整形
byte:1个字节 = 8位 范围:-128~127
0 111 1111 -> 127
补:1 111 1111
反:1 111 1110
原:1 000 0001 -> -1
最小值:
1 000 0000
1 111 1111
1 1 000 0000 -> -128
short:2个字节 = 16位 范围:-2^15 ~ 2^15-1
int: 4个字节 = 32位 范围:-2^31 ~ 2^31-1
long: 8个字节 = 64位 范围:-2^63 ~ 2^63-1//通常用来表示时间
自动类型转换:
byte -> short -> int -> long -> float
public class Demo02Type {
// 数据类型之 - 整型
public static void main(String[] args){
// 整型变量不能超出实际有效范围
byte b = 10;
System.out.println("b: " + b);
short s = 128;
int i = 2100000000;
// 整数的直接量、字面量默认类型都是int
// 想要表示long类型,需要追加 l/L
long l = 21000000000l;
// 获得当前系统时间 - 毫秒 1594025072454
long time = System.currentTimeMillis();
System.out.println("现在时间:" + time);
// long = 0: 1970年1月1日 00:00:00
s = b; // 小范围赋值给大范围,允许 - 自动类型转换
b = (byte)s; // 大范围赋值给小范围,不允许,除非强制类型转换
}
}
3.2 浮点型
科学计数法:
float:32位
1位符号位 8位 指数位 23位 尾数位
double:64位
1位符号位 11位 指数位 52位 尾数位
客观存在:精度缺失问题, 不能判断两个浮点数是否相等
public class Demo04Double {
// 数据类型 之 浮点数
public static void main(String[] args){
double d = 5.0 - 4.9;
// 0.09999999999999964 1/10
System.out.println(d);
d = 3.0 - 2.9;
// 0.10000000000000009
System.out.println(d);
d = 3.0 - 2.5;
// 0.5
System.out.println(d);
// float f = 3.14; // 编译错误
// 小数字面量默认都是double类型
// 如果要给float赋值,需要追加 f/F
float f = 3.14f;
System.out.println(f);
double d1 = 3.14d;
boolean b = true;
}
3.3 字符型
char: 2个字节 = 16位
1111 1111 1111 1111 -> 0 ~ 2^16-1 = 65535 (范围)
‘\u0000’ ~ ‘\uffff’ (Unicode)
public class Demo03Char {
// 数据类型 之 char类型
public static void main(String[] args){
char c = 'a';
c = '中';
c = '\u4e2d'; // Unicode编码 - 1个字符=2个字节 乱码
System.out.println(c);
char c1 = 48; // ASCII码 'A'=65 'a'=97 '0'=48
System.out.println(c1);
c1 = 0; // 空白字符
System.out.println(c1);
System.out.println("\u4e2d\u4e2d\u4e2d\u4e2d");
}
}
3.4 布尔型
boolean: true false
4.运算符
4.1 算数运算符: + - * / %(取模) ++ –
++ i 先运算,再使用
i ++ 先使用,再运算
public class Demo05 {
public static void main(String[] args){
// 运算符左右两边类型是统一的 小范围与大范围统一
double a = 1 + 3.14;
System.out.println(a);
int i = 5 / 2; // 整除
System.out.println(i); // 2
double d = 5 / 2.0;
System.out.println(d); // 2.5
System.out.println("---------");
System.out.println(i++); // 2
System.out.println(i); // 3
}
}
"+"可以实现字符串的连接,同时可以实现字符串与其他数据类型的“相连”。
1. int a = 100;
2. String msg = "a=" + a;
3. System.out.println(msg); // a=100
4. msg = "" + 100 + 200;
5. System.out.println(msg); // 结果为:100200
6. msg = 100 + 200 + "";
7. System.out.println(msg); // 结果为:300
/*
字符串在运算式中先后顺序不同
*/
4.2 赋值运算符:= += -= *= /=
a += 2; // a = a+2(效果不同)
public class Demo06 {
// 运算符讲解之赋值运算符&位运算符
public static void main(String[] args){
byte b = 10;
// b = b + 1; // 编译错误
// b++;
b += 1; // 不会改变类型
System.out.println(b);
}
}
4.3 比较运算符:> < >= <= == !=
结果:boolean类型
4.4 位运算符:& | ^ (逐位运算)
二进制计算 2 ^ 4
0000 0010
0000 0100
0000 0110 = 6
抑或:相同是0,不同是1
public class Demo06 {
public static void main(String[] args){
int a = 2 & 4;
System.out.println(2 ^ 4);
}
}
4.5 逻辑运算符:&& & || |
两边都是boolean值,结果也是boolean值
&&: 两边都是true,结果才是true
||: 有一个是true,结果就是true
public class Demo07 {
// 逻辑运算符
public static void main(String[] args){
int a = 10;
int b = 20;
System.out.println(a++ > 10 && b-- < 20); // false
System.out.println(a); // 11
System.out.println(b); // &:19 &&:20
}
}
原因: && 比 & 多了一个“短路”
短路:通过第一个表达式已经能确定整个结果,第二个表达式就跳过了
4.6 位移运算符:>> << >>>
>>>:无符号右移,永远补0
>>:补位是符号位
public class Demo08 {
// 位移运算符
public static void main(String[] args){
int a = -4;
System.out.println(a >> 1); // -2
System.out.println(a << 1); // -8
System.out.println(a >>> 1); // 2147483646
}
}
4.7 三目运算符
表达式1[boolean值] ? 值1 : 值2
可以用来做判断
public class Demo09 {
// 三目运算符
public static void main(String[] args){
int a = 21;
double d = a <= 20 ? 3.14 : 0;
System.out.println(d);//输出为0.0 自动类型转换
}
}