2020年7月17日 JAVA历史 特点
Java历史:(了解)
1、诞生于SUN(Standford University Network)
2、大概于1996年发布正式的第一版
3、Java之父:詹姆斯.高斯林
4、2009年SUN被Oracle(甲骨文)收购
5、目前学习(开发)的版本是Java8
6、最新版本:Java12(2019年5月)目前是Java 13
7、Java分为三大方向:JavaSE,JavaEE,JavaME
Java9尝试把JavaSE,JavaEE,JavaME合起来。用模块的方式进行区分。
2、Java的特点(了解)
(1)面向对象:关注类、对象、接口等,以及继承、实现等关系
(2)强类型:关注数据类型
(3)体系中立的:字节码.class文件
(4)垃圾回收:GC
3、Java语言运行机制:跨平台
跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。
“Write once , Run Anywhere”一次编写,处处运行。
原理:Java程序不是直接运行在操作系统上,而是运行在JVM(Java Virtual Machine)。
而不同的操作系统平台,可以安装不同的JVM。这个虚拟机只要下载安装就可以了,
程序员不用管,程序员只要关注自己的Java程序就可以。
Java程序开发和运行的步骤:
1、编写Java代码,保存的代码的文件.java
后缀名:.txt,.doc,.jpg,.mp4等
2、编译Java代码为字节码,字节码文件.class
为什么要编译为字节码呢?因为JVM只认识字节码,不认识Java代码
3、运行字节码
把字节码再转成CPU能执行的机器指令。
4、开发环境搭建
(1)
JDK:Java Developer's Kit,Java开发工具包
JDK = JRE + 开发工具集
JRE:Java Runtime Environment,Java运行环境
JRE = JVM + 核心类库(提前写好的代码)
JVM:Java Virtual Machine,Java虚拟机,
运行Java程序需要用到JVM
如果仅仅是运行Java程序,只要装JRE就可以了,不需要装JDK。
如果是要开发Java程序,那么必须安装JDK。
(2)下载与安装
网址:www.oracle.com
下载时注意:是什么平台
例如:windows的64位:jdk-8u141-windows-x64.exe
安装:傻瓜式安装
提醒:
①以后我们作为开发人员,安装软件时,要避免中文目录
②每一个软件的安装建立自己的目录
(3)卸载
①控制面板
②通过“360”或“电脑管家”进行卸载
5、环境变量
为什么要配置环境变量?
windows等操作系统,默认是在当前路径下找“命令”等工具的。
如果我希望它在我指定的目录下去查找这个“命令”,那么我就要
在path这个环境变量中,把目录添加上去。
windows等操作系统,除了在当前目录下查找,还会去path环境变量指定的目录下搜索命令。
【计算机】-》右键-》【属性】-》【高级系统设置】-》【高级】-》【环境变量】
【用户环境变量】只针对当前用户(操作系统登录的用户)
【系统环境变量】针对所有用户的
path=D:\ProgramFiles\Java\jdk1.8.0_141\bin;之前的环境变量的值
说明:;必须是英文状态下,半角输入,用于和其他原有的环境变量的分割
Win7
D:\ProgramFiles\Java\jdk1.8.0_141\bin;D:\ProgramFiles\mysql\mysql-5.6.26-winx64-server\bin;D:\ProgramFiles\tomcat\apache-tomcat-8.0.24\bin;d:\ProgramFiles\2345Soft\HaoZip;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Lenovo\Fingerprint Manager Pro\;C:\Program Files (x86)\Common Files\Lenovo;C:\SWTOOLS\ReadyApps;D:\ProgramFiles\MySQL\MySQL Server 5.5\bin
Win10
表格形式,一行一个环境变量
Java程序的开发步骤:
(1)编写代码
要求:保存为.java的源代码文件
(2)编译代码
目的:把.java源文件编译为.class的字节码文件(因为JVM只认识字节码文件)
编译工具:javac.exe
如何使用编译工具:
格式: javac 原文件名.java
例如: javac HelloWorld.java
(3)运行字节码文件
运行工具:java.exe
如何使用运行工具:
格式:java 字节码文件名或者类名称
例如: java HelloWorld
保存快捷键:Ctrl + S
*/ class HelloWorld{ /* Java程序的主方法,是Java程序运行的入口 */ public static void main(String[] args){ /* 输出语句:""中的内容,表示需要原样输出的内容 */ System.out.println("Hello Java!"); } }
/*
问题1:乱码问题
1、原因
计算机的世界中只有0和1,
人类世界中字符是很丰富的。
最早人类使用计算机时,硬件机器语言,00000011100001111
后来,为了使用计算机的人方便,开始引入了助记符等,可以表示更丰富的字符等信息
ASCII码:数字十进制的65表示字符A,计算机底层把65十进制再转为二进制
最早ASCII码只能表示128字符
后来计算机不仅仅在美国了,会流传到其他国家。
各个国家在ASCII码基础上扩展了128个,变成256个了,但是后面扩展的128个不具有通用性。
甚至计算机传入亚洲,就开始出现多字节编码,
例如:中国GB2312,后来的GBK,台湾等地区Big5等
越来越多的字符编码出现,但是各国之间的文档交流出现问题。
计算机希望在全世界范围能够无障碍的交流,开始引入万国码,Unicode编码表,
这个编码表,可以用它的规则表示全世界所有的字符,每一个字符都有自己唯一的编码。
Unicode编码表只说了,字符用什么数字表示,但是这个数字范围跨度很大,有
1个字节的,2个字节的,3个字节的,4个字节等,在网络传输中出现问题,
例如,我收到4个字节的数据时,该表示为4个字符呢还是1个字符呢,
后面为了解决传输的问题,出现了UTF-8等编码方式,规定了,
到底几个字节是一个字符。
不同的编码方式对同一组数据解析出来的字符是不同的
2、如何解决
统一编码
修改当前源文件的字符编码:
方式一:【编码】菜单--》转为ANSI(与当前操作系统一致)编码
如果希望之后建立的源文件,都是与ANSI编码一致的,那么可以这样做:
方式:【设置】菜单-->【首选项】--》【新建】--》[ANSI]编码
*/
class Problem1{
public static void main(String[] args){
System.out.println("柴林燕是大美女!");
}
}
/*
问题2:大小写问题
(1)源文件名.java的大小写问题
源文件名不区分大小写,但是我们强烈建议大家还是注意大小写
(2)字节码文件名(类名)
严格区分大小写的
(3)代码中大小写问题
严格区分大小写
*/
class Problem2{
public static void main(String[] args){
System.out.println("大小写问题");
}
}
/* 问题3:格式问题(为了好看) (1){}问题 风格1:推荐风格 class 类名{ 方法{ System.out.println(); } } 从右边往左边看,结尾要么是{,},要么是; 风格2:延续老的C语言风格 class 类名 { 方法 { } } 不建议混搭 风格3:不建议 class 类名{ public static void main(String[] args){ System.out.println("hello"); }} (2)缩进问题 class 类名{ Tab键public static void main(String[] args){ Tab键Tab键System.out.println("xxx"); Tab键} } 往右缩进:Tab键 往左回缩:Shift + Tab键 */
class Problem3{ public static void main(String[] args){ System.out.println("xxx"); for(int i=0; i<5; i++){ System.out.println("yyy"); } } }
/* 问题4:源文件名和类名的问题 1、源文件名和类名一致 javac 源文件名.java java 类名 例如: javac Problem4.java java Problem4 2、源文件名和类名不一致 javac 源文件名.java java 类名 例如: javac Problem4.java java Other 在cmd命令行,如何重新运行之前执行过的命令? 按↑,查找之前的命令 按↓,查找某个之后的命令 3、如果某个类是public,那么这个类必须与源文件名一致 换句话说,一个源文件只能有一个public类 4、一个源文件可以编写多个类吗?如果可以,编译后会怎么样呢? 如果一个源文件有多个类(源文件内部),那么编译后会产生多个.class文件(字节码文件)。 字节码文件名就是类名。 平时开发中,一个.java文件,只写一个类,除非有内部类。 而且源文件名和类名一致。(因为后期好维护) */ public class Problem4{ public static void main(String[] args){ System.out.println("源文件名和类名一致"); } } class Other{ public static void main(String[] args){ System.out.println("源文件中有另一个类"); } } class Three{ }
/* 练习1:打印个人信息 (1)数据类型 "柴林燕" -->字符串 18-->整数,整型 '女'-->字符,单个字符 true-->布尔值,逻辑值,它只有两种情况,true和false 40.5-->小数类型 (2)常量 字符串的常量必须用""(双引号) 单字符的常量,必须用''(单引号) 其他整数、小数、布尔等不需要加符号。 System.out.println(xx); 输出xx之后换行,ln==line System.out.print(xx);输出xx之后不换行,下面的输出内容就会接着输出 */ class TestExer1{ public static void main(String[] args){ System.out.println("柴林燕"); System.out.println(18); System.out.println('女'); System.out.println(true); System.out.println(40.5); System.out.println("--------------------------------"); System.out.print("姓名:"); System.out.print("柴林燕"); } }
/*
标识符:在Java中对类名、变量名、方法名等这些要素进行命名的字符序列称为标识符。
通俗的理解:凡是程序员自己命名的地方都叫做标识符。
1、标识符的命名规则(必须遵守,否则编译或运行错误)
(1)Java的标识符必须用26个英文字母的大小写、数字0-9,美元符号$,下划线_
(2)Java的标识符不能使用关键字(包含保留字)和特殊值
例如:class,public,static,void等
一共不能用的有50个关键字+3个特殊值
(3)不能使用空格
(4)数字不能开头
(5)Java的标识符严格区分大小写
2、标识符的命名规范(建议遵守,不遵守会被鄙视)
(1)见名知意
让别人一看就知道这个类、变量、方法的意义在哪里。
(2)类名、接口名等,要求每一个单词的首字母大写,形式:XxxYyyZzz
例如:HelloWorld,BiaoShiFu
(3)变量名、方法名等:要求从第二个单词开始,首字母大写,其余字母小写,
形式:xxxYyyZzz
例如:main()方法,println()方法,print()方法,nextInt()方法
(4)包名等:要求所有单词都小写,每个单词之间使用.分割
形式:xxx.yyy.zzz
例如:java.lang,java.util,java.io,java.text,java.time等
(5)常量名:要求所有单词都大写,每个单词之间使用_分割
形式:XXX_YYY_ZZZ
例如:PI(圆周率),MAX_VALUE(最大值)
*/
//class Biao Shi Fu{}//错误的,因为包含空格
//class 2Test{}//错误的,数字不能开头
class BiaoShiFu{
}
/*
Define:定义,声明
Use:使用
Variable:变量
变量使用的原则:
(1)先声明后使用
包括后面用到的类、方法等,都是遵循先声明后使用
(2)变量必须先初始化(第一次赋值)再访问它的值(打印、计算、比较操作)
(3)变量的声明,在同一个作用域中,只能声明一次,但是赋值可以很多次
作用域:从变量声明处开始,到它所属的{}结束
1、如何声明一个变量?
格式:
数据类型 变量名;
2、如何给变量赋值?
格式:
变量名 = 变量值;
常用的变量的数据类型(刚开始):
int(整数)
double(小数)
char(单个字符)
String(字符串)
*/
class DefineAndUseVariable{ public static void main(String[] args){ //int age;//声明 //age = 18;//赋值 //也可以把声明和第一次赋值合并成一句 int age = 18; // int age = 19;//错误的,第二次赋值不用再加数据类型 age = 19;//第二次赋值 System.out.println(age); if(true){ int num = 0; } //System.out.println(num);//错误的,出了num的作用域 String name = "柴林燕";//字符串的常量必须用""(双引号) char gender = '女';//单字符的常量,必须用''(单引号) double weight = 40.5;//小数类型 boolean marry = true;//布尔类型 真的,假的,成立,不成立 } public static void test(){ //System.out.println(age);//错误的,出了age的作用域 } }
/* 练习2:打印个人信息 个人信息使用变量保存 */ class TestExer2{ public static void main(String[] args){ String name = "柴林燕"; int age = 18; char gender = '女'; double height = 152.0; double weight = 40.5; boolean marry = true; System.out.println(name); System.out.println(age); System.out.println(gender); System.out.println(height); System.out.println(weight); System.out.println(marry); System.out.println("---------------------"); /* ""中的内容,原因显示 name是变量,在显示的时候,不是显示name单词,而是把name变量中存的值取出来显示,所以这里name不加"" "姓名:" + name:把姓名:和name变量中的值拼接起来一起显示 */ System.out.println("姓名:" + name); System.out.println("年龄:" + age); System.out.println("性别:" + gender); System.out.println("身高:" + height); System.out.println("体重:" + weight); System.out.println("是否已婚:" + marry); } }
/* Java中的数据类型: (1)基本数据类型(8种) (2)引用数据类型(今天不讲) String是引用数据类型 一、基本数据类型 1、整型系列 byte: 字节类型 范围:-128~127 1个字节 short:短整型 2个字节 范围:-32768~32767 int:整型 4个字节 范围:.... long:长整型 8个字节 说明:对于long类型的常量,需要加大写L(建议用大写)或小写l 2、小数类型,浮点型系列 float: 单精度浮点型,4个字节, 大概的精度范围是,把小数用科学记数法表示后,小数点后6~7位 说明:float类型的常量,需要在数字后面加F或f double:双精度浮点型,8个字节 大概的精度范围是,把小数用科学记数法表示后,小数点后15~16位 3、字符类型 char:单字符类型,2个字节,可以表示汉字 在Java中是使用Unicode编码表表示。(兼容ASCII码) 每一个字符都有一个唯一的Unicode编码值。 例如: 数字0,Unicode编码值是48 数字1,Unicode编码值是49 ... 字母A,Unicode编码值是65 字母B,Unicode编码值是66 ... 字母a,Unicode编码值是97 字母b,Unicode编码值是98 ... 如何表示char类型的字符常量呢? (1)'一个字符',例如:'女','A' (2)'转义字符',例如:'\n'(换行),'\t'(制表位Tab键), '\\'(斜杠),'\"'(双引号),'\''(单引号), '\b'(删除键Backspace),'\r'(回车键) (3)'斜杠u字符的Unicode编码值的十六进制形式' 4、布尔类型 boolean:只能存两个值之一:true,false 一般boolean的值用于条件判断 计算机表示数据用二进制表示,即0和1 那么一位0或1,我们用bit(位),最小单位 计算机中最基本的单位用的byte字节, 1字节 = 8位 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 1024GB ... 扩展: 硬件厂商存储单位用1000进位,不是1024. 带宽 100Mb,b = bit */ class TestType{ public static void main(String[] args){ boolean marry = false; if(marry){//marry中的值为true,就表示条件成立 System.out.println("已婚"); }else{ System.out.println("未婚"); } System.out.println("--------------------------"); byte b = 127; long tel = 18201583096L; float f = 1.2F; char shuang = '"';//这样可以,表示单个字符 System.out.println(shuang); System.out.println("柴老师说:\"今天天气真好\"");//这里要输出双引号,需要转义 char shang = '\u5c1a'; System.out.println(shang); } }
/* 练习3: 声明一些变量,来保存,一份图书信息: 书名: 作者: 价格: 销量: 库存量: 是否是促销产品: */ class TestExer3{ public static void main(String[] args){ /* String的S是大写的 */ String bookName = "《从入门到放弃》"; String author = "柴林燕"; double price = 100.0; int sale = 0; int amount = 100; boolean cu = true; System.out.println("书名:" + bookName); System.out.println("作者:" + author); System.out.println("价格:" + price); System.out.println("销量:" + sale); System.out.println("库存量:" + amount); System.out.println("是否促销:" + cu); } }