编程语言发展史
第一阶段:二进制语言 ,只有计算机能读懂
第二阶段 :汇编语言 ,计算机能看懂,人类也能看懂
第三阶段: 编程语言 ,人类读懂,计算机能读懂
例子:C、C++、Java、PhP
JDK环境配置
环境
想要使用某些软件,必须要给软件配置环境
配置了环境后,在计算机中可以在任意位置去启动想要使用的软件
运行java项目就需要配置java运行环境
在Path下配置环境变量
进制转换
二进制与十进制之间转换
二进制转成十进制是从后向前按照每个位上的数按为相乘 ,再按权相加
例如二进制数字 01101101 转成十进制就是从后往前按权相加
为:1*2^0+0*2^1+1*2^2+1*2^3+0*2^4+1*2^5+1*2^6=
1+0+4+8+32+64=109
计算器演示
二进制转成十进制则是除二取余,余数结果取反(反向排列)
例如十进制数字15 转成二进制数 ,过程如下:
计算机的存储单位
最小单位:1位 表示一个1或者1个0
1个字节 8位 二进制最多表示为 1111 1111,即十进制的 255
1B=8byte
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
命令提示符
查看网络: ping
查看计算机相关信息 : ipconfig /all
切换盘符 : 盘名:
切换目录: cd 目录名称
启动软件 : 输入应用名称
关于JDK,JRE,JVM
三者属于包含关系
简单来说
JDK是java开发工具包(java代码包含所有的需求工具)
JRE是java运行环境(运行java代码的)
JVM是java虚拟机(所有的java代码是由java虚拟机帮助用户运行的)
三者关系图如下
下面是详细介绍
JDK:
Java Developement Kit Java开发工具包 ,提供给所有Java开发人员使用的工具包,如果要开发Java程序,必须要安装JDK
JRE:
Java Runtime Ele Java运行时环境,运行Java程序需要的内容,将来如果只要运行一个Java程序,只要有JRE就可以了
JVM:
Java Virtual Machine Java虚拟机 : 所有的Java代码都是由Java虚拟机(JVM)帮助我们运行的
JVM三大任务 :
1,加载 :JVM负责把字节码文件(.class)加载到内存中
2,验证 :JVM对字节码文件进行验证,验证代码是否符合规范
3,执行:验证通过后,将代码执行出来
Java的跨平台
平台,指的是不同的操作系统
跨平台,就是指同一个Java程序,可以在不用的操作系统上运行
跨屏台实现原理 :
通过不同操作系统的JVM,java程序能完成跨平台的操作,在不同的操作系统上运行同一份代码程序。
一个简单的java程序的编写
public class HelloWorld{
2, public static void main(String[] args){
3, System.out.println("HelloWorld!!");
}
}
public class HelloWorld{
public static void main(String[] args){
System.out.println("HelloWorld!!");
}
}
关于上面的代码
public 表示一个修饰符,公共的意思,表示任意的位置都可以访问这个类
class 表示类的意思,表示这个Java文件是一个普通的类文件
HelloWorld 表示类的名称,用来标识这个类的,类名一般用大写开头
大括号 :这个类中代码的范围
public static void main(String[] args){} :main方法,固定写法,是程序的入口,所有的Java程序启动,都是从这个main开始
System.out.println() : 向控制台输出指定的内容,括号里面写什么,控制台就会输出什么
注意:一个java程序中必须包含main方法,main方法是java程序运行的入口
Java常用命令:java javac
javac :用来编译指定的.java文件
编译成功后会自动生成.class文件(字节码文件)
java : 用来运行编译好的类文件
如果编译成功后,即可通过java命令来运行该程序
运行方法:在编写好的.java文件程序下输入cmd进入命令控制台,输入上面的命令进行编译与运行
Java注释
使用 // 注释单行
使用 /* 需要注释的内容 */ 注释多行
变量的定义、变量的命名规则
取名规则:遵循标识符的命名规范
标识符 :标识符指的是Java中,类、方法、变量取名的一些规范名称
规范: 标识符有 数字、字母、下划线、$ 组成,不能以数字开头,不能和关键字同名
举例: 123abc 错误
正确 _abc123 ,abc_123 , $abc
变量名的取名 :
遵循标识符的命名规范的基础上,一般采用 小驼峰式 命名,首字母小写,后面的每个单词的首字母大写
定义的标识符最好见名知意
举例: userName ,productName, productId
类名的取名 :
遵循标识符的命名规范的基础上,采用 大驼峰式 的命名,首字母大写,后面的每个单词的首字母大写
举例 : class User{} class Person{} class Product{}
方法名的取名 :
遵循标识符的命名规范的基础上,一般采用 小驼峰式 命名,首字母小写,后面的每个单词的首字母大写
尽量要遵循,望文生义
标识符的名称,不能和关键字同名
Java对大小写敏感,关键字大写是允许作为标识符名的
常量
常量指的是在程序运行过程中,不会改变的量
分类如下 :
整数常量、 字符串常量、字符常量 、小数常量、布尔常量、空常量
代码案例如下
public class DemoVariable01{
public static void main(String[] args){
//编写常量
//整数常量
System.out.println(10);
System.out.println(-10);
//字符串常量,写在一对双引号中的内容
System.out.println("hello");
System.out.println("123");
//浮点数常量,也就是小数值
System.out.println(3.14);
//字符常量,用单引号引起来的内容
//单引号中,有且仅有一个字符
System.out.println('a');
//System.out.println('ab');
System.out.println('中');
//布尔常量 true或者flase
System.out.println(true);
System.out.println(false);
//空常量 null,不能直接用来输出打印
//System.out.println(null);
}
}
基本数据类型、数据类型的存储空间
数据类型 : 用来表示Java语言中使用的数据的方式
分类 : 基本数据类型 和 引用数据类型
基本数据类型:
四类八种:
整数类 : byte 、short 、int 、 long
浮点数类 :float 、double
字符类 : char
布尔类 :boolean
Java中的数据类型,首位都表示符号位,所以取值范围都是位数-1之后做计算
浮点数类型转二进制的方式 :以40.375为例
1,先求整数部分 40 的二进制 ==> 0010 1000
2,求小数部分0.375的二进制 ,小数求二进制的方式是, 小数部分 乘 2 ,满1取1,不满1取0
0.375 * 2 = 0.75 => 0
0.75 * 2 = 1.5 => 1
0.5 * 2 = 1 => 1
0.375的二进制结果为 : 011
40.375 组合后的二进制值为 : 0010 1000 . 011
3,小数点左移,左移到最高位的1后面
0010 1000 . 011 ==> 001.0 1000 011
移动的位数+ 127 ==> 5 + 127 = 132 =>
4,计算最终的二进制值
符号位 + 132的二进制(移动后数值的二进制) + 小数点后的二进制 后补0
0 + 1000 0100 + 0 1000 011 0000 0000 0000 0000
5,测试结果
public static void main(String[] args) {
int i = 0b01000010001000011000000000000000;
System.out.println(Float.intBitsToFloat(i));
}
注意事项 :
1,整数类型,默认是int类型
2,float类型和int类型的字节相同,位数也相同,但是int的精度更高,
float类型的划分是 1个符号位、8个指数位、23个尾数位,它的精度是23位,int就是31位
float类型的取值范围更大
3,double类型的划分是 1个符号位 11个指数位 52个 尾数位 ,比long类的范围大,精度比long类型低
4,浮点数类型,默认是double类型
变量
变量 的概念 : 在程序的运行过程中,可以改变的量,本质是 内存中开辟的一块空间
变量的声明:
语法格式 : 数据类型 变量名 = 值;
变量声明注意事项 :
1,变量不可以重复定义,也就是变量名不能重复,值可以被改变
2,float类型和long类型变量,后面需要加上后缀 ,float 加f或者F ,long类型加L
3,byte类型和short类型变量声明的时候,它们的值不能超过它们的范围
4,没有赋值的变量,不能被使用,必须要赋值之后才能被调用
5,变量的使用,不能超过它的作用域
作用域:就是变量生效的范围,也就是它所在的那个大括号的范围
变量的其他声明方式 :
方式1:
数据类型 变量1,变量2,变量3;
变量1 = 值; 变量2 = 值; 变量3 = 值;
方式2:
数据类型 变量1 = 值,变量2= 值,变量3 = 值;
注意:
1.变量不可以重复定义,值可以被改变(变量名不可重复)
2.float类型和null类型使用时需要加入后缀
3.float使用时要加入'f'或者'F'
Long类型使用时要加'L'或者'l'
byte和short在声明赋值的时候值不可以超过它们的范围
4.声明变量时可以不赋值,但是如果要使用变量必须要赋值
5.变量的使用不能超过它的作用域
作用域是指变量生效的范围,也就是该变量声明时所在的大括号里。
声明在哪个大括号里,作用域就是多大
代码演示案例如下
/**
变量的声明及使用
**/
public class DemoVariable02{
public static void main(String[] args){
//声明变量
//声明整数类型
//语法 : 数据类型 变量名 = 值;
byte b1 = 100;
//byte b2 = 200; //声明的数值,不能超过数据类型的范围
System.out.println(b1);
//System.out.println(b2);
short s1 = 200;
System.out.println(s1);
//int类型的声明
//int b1 = 300; //不可以声明同名的变量
b1 = 110;
System.out.println(b1);
int i = 100;
System.out.println(i);
//long类型
long l = 1000L;
System.out.println(l);
//float类型
float f1 = 3.45F;
System.out.println(f1);
//double类型
double d1 = 2.58;
System.out.println(d1);
//字符类型
char ch = 'A';
System.out.println(ch);
//布尔类型,只有两个值,true或者false
boolean b2 = true;
System.out.println(b2);
//声明变量
int number01 ;
number01 = 100;
System.out.println(number01); //想使用变量必须先赋值
{
int number02 = 200;
System.out.println(number02);
}
//超过作用域范围,无法调用
//System.out.println(number02);
//声明多个变量
int x,y,z;
x = 100;
y=200;
z=300;
int x1 = 100, y1 = 200,z1 = 300;
System.out.println(x);
System.out.println(y);
System.out.println(z);
System.out.println(x1);
System.out.println(y1);
System.out.println(z1);
}
}
小练习:定义声明两个变量,a=10,b=20,并把这两个值进行交换
要求输出语句字格式:符串拼接+两值交换前后的值
public class ExChange{
public static void main(String[] args){
int a = 10;
int b = 20;
int temp;
System.out.println("交换前a的值是"+a+','+"b的值是"+b);
temp=a;
a=b;
b=temp;
System.out.println("交换后a的值是"+a+','+"b的值是"+b);
}
}
类型转换(大类型&小类型、int&char的转换)
大类型和小类型:大小类型的区分即是他们的取值范围的大小
(可以理解为两个大小不同的水杯互相向对方完成装水的操作,小水杯的水装进大水杯,水不会溢出,但是大水杯向小水杯装水,如果大水杯里的水过多则会出现水溢出现象)
基本数据类型范围从小到大的排列顺序如下
byte short int long float double
大小数据类型的转换:
小类型->大类型 : 隐式的数据转换,一定是安全的
大类型 -> 小类型 : 显示的数据类型转换
语法: 小类型 = (小类型) 大类型值;
public class DemoVariable04{
public static void main(String[] args){
//隐式的数据类型转换,小类型 -> 大类型
byte b = 100;
int i = b;
System.out.println(i);
//小类型向大类型转换的时候,会产生精度丢失问题
float f1 = 2.58F;
double d1 = f1; // 2.5799999237060547
System.out.println(d1);
int num = 1234;
float f2 = num;
System.out.println(f2);
//byte类型或者short类型,如果做运算,会被提升类型为int,结果需要做强制转换
byte b1 = 50;
byte b2 = 50;
int b3 = b1 + b2; //byte + byte => int + int
byte b4 = (byte)(b1 + b2);
System.out.println(b3);
System.out.println(b4);
//显示的数据类型转换, 大 -> 小
int num01 = 100;
byte num02 = (byte)num01;
System.out.println(num02);
//大类型的值,转为小类型,需要强制转换,
//如果超过了小类型的范围,可以转换成功,但是最终的结果会发生改变
int num03 = 200;
byte num04 = (byte)num03;
System.out.println(num04); //-56
double num05 = 2.56;
float f3 = (float)num05;
System.out.println(f3);
int num06 = (int)num05;
System.out.println(num06); //2
//字符
char ch01 = 'a';
System.out.println(ch01 + 1); //98
float f4 = (float)2.56; //通过将double类型 2.56强转为float
float f5 = 2.56f; //声明的时候,直接声明为float类型
}
}