配置环境:
JDK java开发工具包 java语言开发环境 JRE java程序运行环境 只需要运行程序时,可以只安装JRE
JVM java程序虚拟机
本地只需要安装使用,服务器必须要配置环境 (配置环境:(环境变量) JAVA_HOME:JDK根路径 Path:系统执行文件所在地址 classpath(现在不需要)):
此电脑->属性->高级系统设置->环境变量->系统变量:
JAVA_HOME:jdk根目录;
Path配置时:打开jdk的bin目录(可执行文件)复制%JAVA_HOME%\bin到Path;
验证:win+R输入cmd输入命令行java version
如果是java...不是可执行文件则Path路径不对。
运行:
新建一个文件夹->新建文本文件(要有文件扩展名(查看->显示->扩展名)(例如:txt)):
重命名hello.java:记事本打开输入:
public class hello{
public static void main(String[] args){
System.out.println("java so easy!");
}
}
*解释总结*:
JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。
JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE和开发工具(包含javac),而JRE 包含了 JVM和 Java 核心类库。
简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。
javac(java编译器) 编译 将.java文件编译成.class文件 class文件又叫做字节码文件
过程:命令行+空格+java+空格+类名 运行指定类
Javac 负责编译 Java 源代码(.java)成字节码文件(.class), JVM(java虚拟机)解析字节码文件编程系统(WINS)(系统)指令
过程中javac编译,java运行JVM解析给系统
java跨平台性:JVM将字节码内容解析成系统执行和系统交互,在不同的系统上安装不同版本的虚拟机,就可以执行字节码文件(java并没有直接和系统交互,JVM作为媒介交互)(一次编译,到处运行)
工具软件操作:
创建一个项目:
包作用;分化,分类一些作用
1.各种注释:三种
//单行注释
/*多行注释*/
/**
*文本注释
*/
2.外部类要求:
关键字:
关键字是开发语言中已经内定的单词,并且赋予了一定的功能,开发人员只能按照指定的语法进行使用。例如:public、void、class;
规范:只有字母,且一般所有字母全部小写
标识符:
标识出的变量:常量,类名,方法名,参数名,各种名字;
命名规范:标识符只能由字母数字$和下划线_,首字符不能是数字,不能是关键字但能包含。(中文语法通过,但不允许)
其他规范:
所有表示都要见名知意! 可以缩写,但如果影响到见名知意,就不要缩写。
变量:
在程序运行阶段可以变化的的量
常量:
在程序运行阶段不可以变化的的量
声明变量:声明变量的名字和类型。
int num;//声明一个整数型对象名叫num,只能存储整数型的值
num=200;//赋值 初始化:第一次赋值 未初始化(不可使用):从未赋值
声明常量:
final int num;//声明
num=12;//初始化,不能再赋值,不管内容是否一致;
规范:只所有字母全部大写
java有两种数据类型:引用数据类型和基本数据类型
基本数据类型:
整数类型:byte、short、int、long
浮点型:float、double
字符型:char
布尔型:boolean
整数类型:
1.byte:一个字节 8个二进制位(8个bit ) 一个符号位0+1-(负数转化10进制要反码加一),七个有效位(-2^7~~2^7-1)
bit:存一个0或1,
2.short:2字节 16个二进制位(-2^15~~2^15-1)
3.int:4字节 32个二进制位(-2^31~~2^31-1)(默认类型)
4.long:8字节 64个二进制位(-2^63~~2^63-1)
默认值0L 赋值要加L后缀区分int
浮点类型:
1.float:单精度浮点型 4字节 取值范围>long>int
默认值0.0f 赋值要加F后缀区分double
2.double:双精度浮点型 8字节 (默认类型)取值范围>long
默认值0.0
float比long类型的数据范围大。
float:4个字节
long:8个字节
为什么float的4个字节比long类型的8个字节的范围大?
因为整数与小数的底层存储有点不同。
相同点:它们都是用二进制存储的
不同点:
小数先转成二进制,然后处理,然后存储。
符号位 其中最左边的为符号位,0为正,1为负。
指数 接下来的E是指数,一共8位,也用二进制来表示。IEEE规定,在float类型中,用来计算指数的偏移量为127(即存贮指数时要在原基础上+127)。
尾数 最后的F是小数部分,尾数正是由这23位的小数部分+1位组成的。
float实际指数的取值范围为-126~+127(其中-127和128作为特殊规定)
于是float的取值范围为(尾数位最小值)-2* 2^127 到(尾数位最大值)+2*2^127
即-2^128到+2^128,表示为十进制为-3.4*10^38到+3.4*10^38
1
2
3
而long的范围是
-9223372036854775808~9223372036854775807(只有19位)
所以float的范围远大于long,但是如果将long强制类型转换为float可能会出现经度损失(float的精度为科学记数法的小数点后6~7位)。
字符类型
char:两个字节 0~65535 FFFF(十六进制)
char c = 'c' ;''不行,必须有且只有一个;
默认值’\u0000‘即0。
布尔类型:
boolean:1/4字节 不可和其他类型转换
默认值(false)
boolean=true/false;占一个字节 Boolean arr={true,false};数组按整形保存。
基本类型转换
在Java中,对于byte、short、char这三种类型的变量,如果参与运算时会自动转换为int类型。
byte a = 1;
byte b = 2;
b = a + b; //报编译错误,不兼容的类型: 从 int 转换到 byte 可能会有精度损失
b += a; //ok
隐式转换
程序会自动完成的转换。
取值范围小的值可以自动转换为取值范围大的值;
byte numByte=2;
int numInt=numByte;
float numFloat=numByte;
numFloat=numInt;
numFloat=10L;
强制类型转换
int numInt=2;
byte numByte=(byte) numInt;
numInt=(int) numFloat;
存不了的一刀切保留自己能保存的位数的值
整形和字符的转换:
char类型的变量可以保存默认为int类型的常量(前提是常量的值在char类型的范围内),但是不能直接保存为int类型的变量值,需要进行强制类型转换。
char c1 = 100;
int a = 100;
a=c1;
char c2 = a;//程序编译会报错。
char c3 = (char)a;
char、byte、short三种类型在进行混合运算时,会自动提升数据类型,先转换成int型。
Java中,用常量(默认数据类型为int)来给变量(数据类型为byte、short、char)赋值时,只要常量的值在该变量所述数据类型的有效范围内,则就可以正常赋值。
字符三种表达方式:
numInt='a';
char numChar=0;(只能从0开始,因为字符从0开始编码)
numChar='\u0000'; \u代表Unicode,0000是十六进制,最大值FFFF
// \转义符 \' 代表' \r代表回车 \n代表换行 \\代表\ 第一个转义符,第二个\
\’ 单引号字符
\\ 反斜杠字符
\r 回车
\n 换行
\f 走纸换页
\t 横向跳格
\b 退格
二进制表示: int a=0B111;
八进制表示: int b=0111;
十六进制表示: int b=0X0111;
输入输出:
输出:
System.out.println();可无参
System.out.print();不可以没有参数、
输入:
Scanner in=new Scanner(System.in);//系统输入流对象System.in
in.close();//关闭流
运算符
+ - * / %
整数和整数运算是整数int,有long变long
%结果是+/-:a取余b结果符号和a一样
优先级:* / % + -
一元运算符
a++ a-- ++a --a
因为d+1返回值是int类型;
c=a++:先赋值再++;
c=++a:先++再赋值;
(++a)-(a++)=1;//++a返回值是已经自增了,而a++返回值是未自增之前的
比较运算符:
> < >= <= == != 返回值一定是布尔类型
比较值,和类型无关(基本数据类型) 12.0==12 true
逻辑运算符:
&&逻辑与 ||逻辑或 !逻辑非
短路现象:多个表达式运算,前面已经明确整个表达式结果,那么后面的将不会被运行
例如:1>2&&4>3 4>3不会被运行;2>1||4>3 4>3不会被运行