JAVA简介
JAVA介绍
java是面向对象的开发语言
创始人:James Gosling詹姆斯·高斯林
java特性和优势:跨平台/可移植性,安全性,面向对象,简单性,高能性,分布式,多线程,健壮性
JDK安装配置
JDK、JRE、JVM
- JVM:全称“Java Virtual Machine”(Java虚拟机,),用于运行Java应用程序。不同的操作系统有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现 了“一次编译 ,随处运行”。 Java 虚拟机是实现跨平台的核心机制。
- JRE:全称“Java Runtime Environment”(Java运行环境),提供核心类库 + JVM
- JVM:全称“Java Development Kit”(Java开发工具包,程序员使用),包含jre,以及增加编译、调试、监控 等用于程序开发的文件。
JDK安装步骤
注意安装路径中不包含中文和空格
- 下载安装包解压
- 打开安装程序傻瓜式下载,点击下一步
- 配置变量:右击此电脑“属性”,系统>系统信息>高级设置>环境变量;系统环境变量中新建"JAVA_HOM”,变量值浏览目录到JDK安装路径下,点击保存;找到环境变量中“Path”,选中点击编辑,选中“%JAVA_HOME%\bin”点击保
- 测试:按住win+r,输入cmd,点击回车;输入java和javac指令,若输出则配置成功;无输出则配置失败
JAVA基础
第一个java程序
-
源代码编写
用记事本或IDE等工具完成代码输出,报春后缀名为.java的Java源文件
-
源代码编译
用javac命令 使用java编译器对源文件进行语法检查,如果没有语法错误,编译成功后将生成后缀名为.class的字节码文件
-
运行字节码
使用java命令启动JVM虚拟机,并使用java解释器将字节码文件编译机器代码,执行并显示结果
转义字符\
-
\n:换行
-
\t:水平制表符,补全当前字符串长度至8的整数倍,根据字符段长度补1~8个空格
-
\:转义字符
-
\\n \\t
第一个\表示转义,第二个\表示输出的字符\
上面输出为:\n 和 \t
-
\\windows\\Syetem
-
第一个\表示转义,第二个\表示输出的字符,第三个\表示转义,第四个\表示输出的字符\,第五个\表示转义,第6个\表示输出的字符\
上面输面输出为:\windows\System
Local和Math函数
- Local
- LocalDate.now():获取本地日期,年月日
- .getYear():获取年份
- .getMonth();获取月份,获取英文
- .getMonthValue();获取月份,获取数字
- .getDayOfYear();获取今天是今年的第多少天
- .getDayOfMonth;获取今天是这个月的第多少天
- .getDayOfweek;获取星期几
- LocalTime.now():获取本地时间钟分秒
- LocalDateTime.now();获取本地地日期年月日+时间钟分秒
- LocalDate.now():获取本地日期,年月日
- Math
- .PI:输出Π(pai:3.1415926)
- .sqrt(a):开a的平方
- .pow(a,b):幂运算,输出a的b次方
- .random():生成0-1之间随机数
- abs():取绝对值
变量和数据类型
变量
概念
- 程序运行期间内容可以发生改变的量
- 从内存角度来解释:变量是代表内存中的一个存储单元
- 从作用角度来解释:变量用于保存程序在运行过程中产生的临时数据
- 从语法角度来解释:变量是使用不同数据类型,来进行定义保存数据的语法形式
关键字
java关键字是java语言保留供内部使用的,关键字也可称为保留字,不能使用关键字作为变量名或方法名
关键字
命名要求
- 变量名有英文字母,下划线,$符号,数字组成,其中数字不能做开头,不能使用java关键字作为变量名
- 驼峰命名法
- 类:大驼峰命名法,不管多少个单词首字母大写,eg:Myname
- 方法:小驼峰命名法,超过两个单词时每个单词首字母大写,eg:MyName
基本数据类型
四类八种:
-
数值型:
- 整数类型:byte,short,int,long
- 浮点数类型:float,double
-
非数值型
- 字符类型:char
- 布尔类型:boolean
-
1byte(字节)=8bit(位)
-
bit:计算机能识别的最小单位,1bit存放一位0/1
-
1字节等于8位,8位0/1,其中第一位表示正负(0代表正1代表负)所以byte的范围是-(2的七次方)到(2的七次方-1)
-
1字节:byte
2字节:short char
4字节:int boolean float
8字节:long double
-
整型
-
byte:
-
范围:-128~127
-
定义语法:
byte a;
-
-
short:
-
范围:-32768~32767
-
定义语法:
short a;
-
-
int:
-
范围:-2147483648~2147483647(-2的31次方到2的31次方-1)
-
定义语法:
int a;
-
-
long:
-
范围::
**-**9223372036854775808 ~ **+**9223372036854775807 (-2的63次方到2的63次方-1)
-
定义语法:
long a; long a1=90000000000L;
-
注:定义变量时赋值需要在后面加上l或者L;
浮点型
浮点类型数值就是小数,因为小数用科学计数法表示的时候,小数点是可以”浮动“的,如1234.5可以表示12.345×10的平方,所以称为浮点数
定义小数默认double
存贮方式
float 4个字节 32位 eg:
123.456
x
1
0
5
123.456x10^5
123.456x105
最高位:符号位 存放正负
符号位下7位:存储幂指数 存放10的6次方的6
剩下23位:有效位 存放123.456
-
float
-
范围:最大可表示3.4×10的38次方
-
定义语法:
float a; float a1=3.14f;
注:定义变量时赋值需要在后面加上f或者F
-
-
double
-
范围:最大可表示1.79×10的308c次方
-
定义语法:
double a;
-
字符类型
char类型表示一个字符,该类型只能表示非负值,java中ASCII值可以用char和Unicode表示
定义语法:
char a;
char a1='9';
注:char类型使用单引号,且仅有一个字符
布尔类型
boolean类型只有true和false两个值,布尔类型是关系运算的计算结果
定义语法:
boolean a1=true;
boolean a2=false;
引用类型
除8中基本数据类型外,其余类型都是引用数据类型,最常见的是String字符串,用于保存若干的字符
定义语法:
String str1="我本将心照明月";
注:String类型使用双引号
常量
-
定义:
**在程序运行期间,固定不变的量;**常量值又称为字面常量,它是通过数据直接表示的
-
常量定义:
定义变量时,如果加上final关键字,这个变量就变成了常量。定义常量时,必须精选初始化赋值,之后就不可以再次赋值,再次赋值会导致编译错误。一般情况下常量名使用大写字母表示
final double PI=3.14; double r=5.0; double area=PI*r*r; PI =300; //编译错误,常量不允许被修改
-
常量的作用:
用有意义的变量名来避免魔法数字,例如不要再代码中到处写3.15;而是定义一个PI来表示3.14;如果需要提高计算精准度,我们住需要在定义PI处修改,而不必所有地方替
变量定义
赋值
要在取值范围之内赋值
byte a = 127;
byte b = 128;
打印a输出127,打印b输出-128
类型转换
自动类型转换
取值范围小转换为取值范围大的类型
大范围类型 变量名 = 小范围的变量名
byte a = 10;
int b = a;
float f1 = 12.3F;
double d = f1;
b输出10,d输出12.3
强制类型转换
取值范围大转换为取值范围小的类型
小范围的数据类型 变量名 = (小范围的数据类型)大范围的变量名
int a = 10;
byte b = (byte)a;
System.out.println(b);
double d = 12.5;
float f = (float)d;
System.out.println(f);
不加强制类型转换报错
强制类型转换会出现的两个问题
-
溢出
范围大转化为范围小时,值大于小范围的取值时就会出现溢出问题
int a = -129; byte b = (byte)a; System.out.println(b);
a进行强制类型转换溢出,b会输出127
-
精度丢失
当高精度的值强制转化为低精度的值时就会出现精度丢的问题
float f = 12.5F; int c = (int)f; System.out.println(c);
当float类f型强制转化为整型c时,c精确度是1,f精确度是0.1,造成小数位的丢失,c会输出12
运算符
算数运算符
单目运算符:+(取正),-(取负)
双目运算符:+,-,×,/,%
单目运算符
取正:+
取负:-
双目运算符
-
+加
-
数字+数字:
-
数字+字符串
-
字符串+字符
int a = 10; int b = 10; String s="中国人"; System.out.println(a+b); //输出:20 System.out.println(a+s); //输出:10中国人 System.out.println(a+s+b); //输出:10中国人10
-
-
-减
只能进行数字减数字
int b = 10;
float f = 11.5F;
float f1 = 1.5F;
System.out.println(f-b); //输出1.5
System.out.println(b-f1); //输出8.5
- *乘
只能进行数字乘数字
-
/除
- 整数/整数=整数
- 整数/浮点数=浮点数
-
%取余
- 整数%整数=整数
- 整数%浮点数=浮点数
赋值运算符
+=,-=,*=,/=,%=
int a=2;
a +=4; //相当于a=a+4即a=2+4,其他同理
自增减运算符
单独使用,符号前后代表的值一样
混合使用
++在前,先自增,-- 在前,先自减
++在后,先赋值,-- 在后,先赋值
自增:++
int a=10;
int b=a++;
int c=++a;
//a输出12(自加了两次)b输出10(第二行a先赋值给了b,再自家),c输出12(第二行自加一次,第三行先自自加又赋值给了c)
自减:同理自加
不同类型的运算
-
不同类型的运算,结果去大范围的
-
char类型可以进行运算
// ASCII码表 - 小码表 存储0-177之间内容 // Unicode码表 - 大码表 char c = 'A'; char c1 = 65; char c2 = (char)(c+32); int a = c; System.out.println(c); System.out.println(c1); System.out.println(c2); System.out.println(a);
c输出A,c1输出A,c2输出B,a输出65
-
boolean类型不可做运算
-
byte,short,char
byte,short,char运算
byte,short,char进行运算时,将其转为int
byte a = 10; byte b = 10; byte c = (byte)(a+b); int c1 = a+b; byte b1 = 10; byte b2 = (byte)(b1+10); System.out.println(c); System.out.println(c1); System.out.println(b2);
第三行若不加强制类型转换(byte),则报错;byte类型的a和b在运算时转换为int类型,定义int类型c1则正确;计算b2时,byte类型b1自动转换为int类型,所以把(b1+10)强制类型转换为byte类型
关系运算符
==,!=,>,<,>=,<=
int a=10;
int b=18;
System.out.println(a > b); //输出布尔类型,true/false
逻辑运算符
左右两边为boolean类型,运算得到boolean类型
短路与非短路区别:当短路能确认结果是就不会再进行计算,而非短路会全部算完
-
与
- 短路与&&:
- 前面为假不进行后面的运算,直接返回false
- 两边为真,则为真,有假则假
- 非短路与&
- 两边为真,则为真,有假则假(不具备短路路运算)
- 短路与&&:
-
或
- 短路或||:
- 前面为真不进行后面的运算,直接返回true
- 有真则真,都假则假
- 非短路或|
- 有真则真,都假则假(不具备短路路运算)
- 短路或||:
-
非
!:取反
位运算
-
&按位与
两个都为1,结果为1
可用此判断奇偶数
int a=5; int b=6; int c=a&1; int d=b&1; System.out.println("a是奇数"+(c==1)); System.out.println("b是偶数"+(d==0));
-
|按位或
两个中有1,结果为1
-
~按位取反
- 原码,反码,补码:
原码:数的二进制表示就是原码
反码:正数–>正数的反码等原码
负数–>符号位不变,其他位取反
补码:正数–>正数的补码等于原码
负数–>负数的补码的等于补码+1
- !!!按位取反的步骤:
正数按位取反:二进制原码–>二进制原码取反–>二进制原码取反-1–>(二进制原码取反-1)再取反符号位不参与–>二进制结果
负数按位取反:二进制原码–>反码:符号位不变其他位取反–>补码:反码+1(得到补码符号位为0,正数)–>二进制结果(正数的原码反码补码相同,上一步得到一个整数的补码,既是此数的原码)
-
^按位异或
相同为0,不同为1
aab=b;
abb=a;
可以用于两个数字交换
int a=2; int b=4; a=a^b; b=a^b; a=a^b; //输出结果a为4,b为2,实现了交换
-
<< / >> 左移 /右移
左移:十进制5左移2 0000 0101 将变为0000 1010
右移:十进制8右移1 0000 1000 将变为0000 0100
左移1相当于×2,左移2相当于×4
右移1相当于除,右移2相当于除4
条件运算符
表达式1 ?表达式2 :表达式3
表达式1返回值为boolean类型,true执行表达式2,false执行表达式3;表达式2和表达式3的类型必须相同
用处:取两个数的较大值或较
int a = 2;
int b = 4;
int c = a > b ? a : b;
//若a>b,则取a;否则取b