Java
day1——2023.8.4
什么是编程?
人类将自我想法和思路整理出来,以编程语言的形式告诉计算机,让计算机帮助人类完成相应的任务。
编程需要依靠编程语言去完成。
编程语言发展史
第一阶段:二进制语言,只有计算机能读懂,举例:010101
第二阶段:汇编语言,计算机能看懂,人类也能看懂,举例:0x15
第三阶段:编程语言,人类能读懂,计算机也能懂,举例:C,Java
Java发展史
-
1991年:Java的诞生。詹姆斯·高斯林和他的团队在Sun Microsystems(现在是Oracle Corporation的一部分)开始开发Java语言项目,最初命名为Oak,目标是为家用电器制造商开发智能家居解决方案。后来,该项目重新定位为开发Web浏览器上的动态内容。首次公开亮相是在1995年的SunWorld会议上。
-
1995年:正式发布Java 1.0。Java 1.0的发布标志着Java作为一种独立的编程语言的诞生。Java 1.0具有基本的语言特性、类库和工具,引起了广泛的关注和采用。
-
1997年:发布Java 1.1。Java 1.1增加了许多新特性和改进,包括内部类、反射、JAR文件格式等。这个版本在企业开发中得到了广泛应用。
-
1998年:发布Java1.2
J2EE:分布式开发(网络电子商务)
J2SE:嵌入式开发(手机等小型电子设备的软件)
J2ME:桌面应用软件(单机软件)
-
2000年:发布Java 1.3、Java 1.4。这些版本引入了许多新的特性和改进,包括Java虚拟机的性能提升、Swing用户界面库、Java平台的国际化和特定领域的API等。
-
2004年:发布Java 5(又称Java 1.5或Java 5.0)。Java 5引入了重要的语言和库特性,如泛型、自动装箱和拆箱、枚举类型、注解等。这些特性增强了Java的表达能力和可靠性。
-
2006年:发布Java 6(又称Java 1.6)。Java 6引入了很多新特性,包括脚本语言支持、JDBC 4.0、并发编程库的增强等。
-
2011年:发布Java 7。Java 7的特性包括钻石操作符、字符串开关、NIO 2、更好的异常处理、并发库的改进等。
-
2014年:发布Java 8。Java 8引入了重要的特性,如Lambda表达式、Stream API、新的日期和时间API等。这些特性使得Java在函数式编程和并行处理方面有了更好的支持。
-
2017年:发布Java 9。Java 9引入了模块化系统(Project Jigsaw)、改进的JShell交互式编程环境、新的HTTP/2客户端等。
-
2018年:发布Java 10和Java 11。这些版本引入了一些小的语言和库特性改进,以及性能提升和安全增强。
-
从9版本开始每隔6个月更新一次。
JDK环境配置
环境
想要使用某些软件,必须要给软件配置环境
配置了环境后,在计算机中可以在任意位置去启动想要使用的软件
安装JDK配置环境
1.点击我的电脑,属性
2.
3.
二进制
计算机的存储单位
最小单位:1位表示一个1或者一个0
1个字节 8位 1111,1111——>255
1KB | 1024B |
---|---|
1MB | 1024KB |
1GB | 1024MB |
1TB | 1024GB |
命令提示符
查看网络:ping
查看计算机相关信息:ipconfig/all
切换盘符:盘名:
切换目录:cd 目录名称
启动软件:输入应用名称
JDK,JRE,JVM(三大任务)
JDK:Java Developer Kit(Java开发工具包),提供给所有Java开发人员使用的工具包,如果要开发Java程序,必须要安装JDK
JRE:Java Runtime Environment(Java运行时环境),运行Java程序需要的内容,将来如果只要运行一个Java程序,只要有JRE就可以了
JVM:Java Virtual Machine(Java虚拟机),所有的Java代码都是由Java虚拟机(JVM)帮助我们运行的
JDK包含JRE,JRE包含JVM
Java的跨平台
平台
不同的操作系统
跨平台
同一个Java程序,可以在不同的操作系统上运行
跨平台实现原理
通过不同操作系统的JVM,完成跨平台的操作
JVM三大任务
1.加载:JVM负责把字节码文件(.class)加载到内存中
2.验证:JVM对字节码文件进行验证,验证代码是否符合规范
3.执行:验证通过后,将代码执行出来
Java的HelloWorld(记事本.手动编译)
public class HelloWorld{
public static void main(String[] args){
System.out.println("HelloWorld!!");
}
}
1.public class HelloWorld{}
public:一个修饰符,公共的意思,表示任意位置都可以访问这个类
class:类的意思,表示这个java文件是一个普通的类文件
HelloWorld:类的名称,用来标识这个类的,类名一般用大写开头
大括号:这个类中代码的范围
2.public static void main(String[] args){}
main方法:固定写法(psvm),是程序的入口,所有的程序启动都是从这个main方法开始
3.System.out.println(“HelloWorld!!”);
向控制台输出指定的内容,括号里面写什么,就会输出什么
写入汉字的时候编译报错的问题:
格式编译报错,需要修改文件的编码格式
修改完之后,重新编译
Java常用命令:java javac
javac
用来编译指定的.java文件
java
用来运行编译好的类文件
Java中的注释
注释
对于代码的解释,写给自己或者其他人看的
单行注释
注释一行内容,以//开头
多行注释
注释多行内容,一般做一些说明性的注释,写在/* */的范围内
public class HelloWorld{
/*
这是这个HelloWorld的main方法
这个HelloWorld类,从main方法开始运行
*/
public static void main(String[] args){
//输出HelloWorld这个字符串
System.out.println("HelloWorld!!");
}
}
数据类型&变量
变量
取名规则
遵循标识符的命名规范
标识符
Java中,类,方法,变量取名的一些规范名称
规范
标识符
数字,字母,下划线,$组成,不能以数字开头,不能和关键字同名
举例:123abc(x)abc,abc_123,$abc(√)
变量名
遵循标识符的命名规范的基础上,一般采用小驼峰式命名,首字母小写,后面的每个单词的首字母大写,尽量遵循望文生义
举例:useName,productName,productId
类名
遵循标识符的命名规范的基础上,采用 大驼峰式 的命名,首字母大写,后面的每个单词的首字母大写
举例 : class User{} class Person{} class Product{}
方法名
遵循标识符的命名规范的基础上,一般采用 小驼峰式 命名,首字母小写,后面的每个单词的首字母大写尽量要遵循 望文生义
举例 : void getUserName(){}
练习
5个变量名:图书编号(bookId),图书名(bookName),图书作者(bookAuthor),图书出版社(bookPublisher),图书价格(bookPrice)
5个类名:书籍类(class Book),作者类(class Author),用户类(class User),出版社类(class Publisher),借阅类(class Borrower)
5个方法名:获取作者名(getAuthorName),添加书籍(insertBookName),修改书籍(alterBookName),获取用户信息(getUserMessage),删除用户信息(deleteUserMessage)
Java关键字
标识符的名称,不能和关键字同名
Java对大小写敏感,关键字大写是允许作为标识符名的
比如Public Class
常量
定义
程序运行过程中,不会改变的量
分类
整数常量,字符串常量,字符常量,小数常量,布尔常量,空常量
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('周');
//System.out.println('ab');(x)
//布尔常量 true或者false
System.out.println(true);
System.out.println(false);
//空常量 null
//System.out.println(null);(空不能直接这么使用)
}
}
基本数据类型,数据类型的存储空间
数据类型
定义
用来表示Java语言中使用的数据的方式
分类
基本数据类型 和 引用数据类型
基本数据分类(四类八种)
整数类:byte,short,int,long
浮点数类:float,double
字符类:char
布尔类:boolean
float类型:符号位+小数点前的二进制+小数点后位数补齐
Java中的数据类型,首位都是符号位,所以取值范围都是位数减一后做计算
浮点数类型转二进制(以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
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类型
/*
变量的声明和使用
*/
public class DemoVariable02 {
public static void main(String[] args){
//声明变量
//声明整数类型
//语法: 数据类型 变量名 = 值
byte b1 = 10;
//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 l1 = 1000;
long l2 = 2000;
System.out.println(l1);
System.out.println(l2);
//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);
//布尔类型
boolean b2 = true;
boolean b3 = false;
System.out.println(b2);
System.out.println(b3);
}
}
变量
在程序运行的过程中,可以改变的量,本质上就是内存中开辟的一块空间
变量的声明
语法格式: 数据类型 变量名 = 值;
变量声明的注意事项
1.变量不可以重复定义,也就是变量名不能重复,值可以被改变
2.float类型和long类型变量,后面需要加上后缀,float加f/F,long类型加L
3.byte类型和short类型变量声明的时候,它们的值不能超过它们的范围
4.没有赋值的变量,不能被使用,必须要赋值后才能使用
//声明变量
int number01;
number01 = 100;
System.out.println(number01);//想用变量就必须先赋值
5.变量的使用,不能超过它的作用域
作用域:就是变量生效的范围,也就是它所在的那个大括号的范围
变量的其他声明方式:
方式1:
数据类型 变量1,变量2,变量3;
变量1 = 值; 变量2 = 值; 变量3 = 值;
方式2:
数据类型 变量1 = 值,变量2= 值,变量3 = 值;
//声明多个变量
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,b,a = 10,b = 20,输出这两个变量,输出内容是:a的值是:xx,b的值是:xx,然后将a和b的值做交换,再分别输出a和b
public class Example1 {
public static void main(String[] main){
int a = 10,b = 20;
int c;
System.out.println("a的值是" +a);
System.out.println("b的值是" +b);
//借助一个中间变量
c = a; //先把a赋值给c
a = b; //再把b赋值给a
b = c; //再把c赋值给b
System.out.println("a的值是" +a);
System.out.println("b的值是" +b);
}
}
类型转换(大类型&小类型、int&char的转换)
大类型和小类型
大小类型的区分即是他们取值范围的大小
byte short int long float double
大小数据类型的转换
小——>大:隐式的数据类型转换
public class DemoVaribale03 {
public static void main(String[] args){
//隐式的数据类型转换,小类型->大类型
byte b = 100;
int i = b;
System.out.println(i);
//小类型向大类型转换的时候,会产生精度的丢失问题
float f1 = 2.58F;
double d1 = f1;
System.out.println(d1);
int num = 1234;
float f2 = num;
System.out.println(f2);
//byte类型或者short类型,如果做运算,会被提升类型为int,
byte b1 = 50;
byte b2 = 50;
//byte b3 = b1 + b2; //不可以实现 byte + byte ->int + int
//int b3 = b1 + b2; //可以实现
byte b3 = (byte)(b1 + b2); //可以实现
System.out.println(b3);
}
}
大——>小:显示的数据类型转换
public class DemoVaribale03 {
public static void main(String[] args){
//显示的数据类型转换, 大——>小
int num01 = 100;
//byte num02 = num01;
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(ASSCI码)
float f4 = (float) 2.56; //通过将double类型2.56强转为float
float f5 = 2.56f; //声明的时候直接就是赋值float = 2.56f
}
}