1. Java概述
1.1 Java简介及发展史
语言:是人与人之间用于沟通的一种方式。例如:中国人与中国人用普通话沟通。
编程语言:人与计算机之间进行信息交流沟通的一种特殊语言,人们可以使用编程语言对计算机下达命令,让计算
机完成人们需要的功能。
Java语言是美国Sun公司(Stanford University Network)在1995年推出的一门编程语言。
计算机语言有很多种 如: C ,C++,Java ,PHP Kotlin Python Scala 等 。
Java作者:詹姆斯·高斯林(James Gosling)
发展历史
1995年,Sun推出了java
1996年,发布JDK1.0
1998年,发布JDK1.2,并将java分成了J2EE、J2SE、J2ME
J2SE:Java技术的核心和基础,是J2EE和J2ME的基础。
J2EE:java技术中应用最广泛的部分,提供了企业应用开发相关的完整解决方案。
J2ME:主要用于嵌入式消费电子,如机顶盒、移动电话、PDA的开发。
2009年,Sun公司被甲骨文公司收购。
2004年,发布JDK1.5,同时将JDK1.5改名为JavaSE5.0,J2EE、J2ME也相应改名为Java EE、Java ME。
2014年,发布JDK8。
1.2 Java语言能做什么
网站领域、Android、大数据领域等。
1.3 跨平台原理
java语言的三大特点:面向对象、健壮性、跨平台性。
平台:CPU处理器与操作系统的整体叫平台,简单理解就是操作系统,如Windows、Mac、LInux
跨平台:一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。Writeonce , Run Anywhere
Java程序并非是直接运行的,要经过先编译,后解释两个步骤。
先编译成与平台无关的字节码(.class文件),java虚拟机将字节码解释成特定平台的机器码并执行。只要为不同平台实现了相应的虚拟机,编译后的字节码就可以在该平台上运行。
JVM(java虚拟机)是java语言跨平台的关键部分。
1.4 Java 两种核心机制
java虚拟机
JVM 是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
对于不同平台有不同的虚拟机
只有平台提供了对于的java虚拟机,java程序才能在该平台运行。
java虚拟机实现了java程序的一次编译到处运行。
垃圾收集机制
不再使用的内存空间应回收。
垃圾回收在 Java 程序运行过程中自动进行。
1.5 Jvm、JRE和JDK
JVM(Java Virtual Machine),Java虚拟机,是一个抽象的计算机,和实际计算机一样,负责解释执行字节码文件。
JRE(Java Runtime Environment),Java运行环境,是运行java程序的必需条件。包含了JVM和Java的核心类库(Java API)
JDK(Java Development Kit),Java标准开发包,包含了JRE和开发工具
总结:我们只需安装JDK即可,它包含了java的运行环境和虚拟机。
1.6 JDK的下载和安装
下载
资料包中已经提供了安装包
安装
傻瓜式安装,一路下一步。
注意:安装路径不要包含中文或者空格等特殊字符。
JDK的安装目录介绍
2. 第一个演示程序
2.1 常用DOS命令
1.概念:磁盘操作系统。在接触集成开发环境之前,我们需要使用命令行窗口对java程序进行编译和运行,所以需
要知道一些常用DOS命令。
2.打开方式:
win + r打开运行窗口,输入cmd,回车。
3.常用命令及其作用
2.2 Path环境变量的配置
2.2.1 为什么配置环境变量
如果不配置环境变量,在使用javac和java时必须要进入到java安装目录的bin目录下,使用起来不太方便。
配置环境变量的作用就是可以在任意目录下使用javac和java。
2.2.2 配置环境变量步骤
参见《jdk安装及环境变量配置文档》文档。
2.3 HelloWorld案例
HelloWorld案例是指在计算机屏幕上输出“HelloWorld”这行文字。各种计算机语言都习惯使用该案例作为第一个演示案例。
2.3.1 Java程序开发运行流程
开发Java程序,需要三个步骤:编写程序,编译程序,运行程序。
2.3.2 HelloWorld案例的编写
新建一个HelloWorld.java文件,用记事本打开,键入如下内容
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
注意:
java程序源文件后缀必须是.java,不能是其他文件后缀名。
java程序源文件的文件名必须与public类的类名相同,因此,一个java源文件里最多只能定义一个public类。
大写小问题,java语言是严格区分大小写的语言 。
main方法问题,main方法必须使用public、static、void修饰。
2.3.3 HelloWorld案例的编译和运行
编译命令:javac 文件名.java
2.4 Notepad++软件的安装和使用
2.4.1 简介
Notepad++功能比 Windows中的记事本强大,除了可以用来制作一般的纯文字说明文件,也十分适合编写计算机程序代码。Notepad++ 不仅有语法高亮显示,也有语法折叠功能,并且支持宏以及扩充基本功能的外挂模组。
2.4.2 安装及配置
傻瓜式安装,一路下一步
3. java基础语法
3.1 注释
注释是对代码的解释和说明文字,可以提高程序的可读性。
程序注释是源代码的一个重要组成部分,对于一份规范的程序源代码而言,注释应该占到源代码的三分之一以上。
Java中的注释分为三种:
单行注释。
// 只能注释单行内容
多行注释。
/*
这里可以写
多行注释内容
*/
文档注释。文档注释以/**
开始,以*/
结束。通过javadoc工具可直接将源代码里文档注释提取成文档。
//这是定义了一个类,类名为Demo01,java中的代码都需要写在一个类中。 public class Demo01 { /* main是java程序的入口 也称为主方法。 */ public static void main(String[] args){ //输出语句,""当中的内容会原样输出打印到控制台 System.out.println("注释"); } }
3.2 关键字
关键字:java语言中一些具有特殊含义的单词被称为关键字。
关键字的特点:
字母全小写。
关键字在高级编辑器中会高亮显示。
java一共有50个关键字
3.3 常量
常量:在程序运行过程中,其值不可以发生改变的量。
分类:
整数常量,例如:-99、0、99等
小数常量,例如:-9.9、9.0、99.99等
字符常量,用单引号括起来的一个字符,单引号当中只能是一个字符,不能没有字符,也不能有多个字符。
例如:'a'、'5'、'B'、'中'等
字符串常量,用双引号括起来的多个字符(可以包含0个、一个或多个),例如"a"、"abc"、"中国"等
布尔常量,表示真假,只有两个值true和false
空常量,一个特殊的值,空值,值为null
/* 分类 整数常量,例如:-99、0、99等 小数常量,例如:-9.9、9.0、99.99等 字符常量,用单引号括起来的一个字符,单引号当中只能是一个字符,不能没有字符,也不能有多个字符。例如:‘a'、'9'、'A'、'中'等 字符串常量,用双引号括起来的多个字符(可以包含0个、一个或多个),例如“a”、“java”、“程序员"等 布尔常量,表示真假,只能是true和false 空常量,一个特殊的值,空值,值为null 注意:除空常量外,其他常量均可使用输出语句直接输出。 */ public class Demo02 { public static void main(String[] args) { //整数常量: System.out.println(99); System.out.println(-99); System.out.println("========================"); //小数常量: System.out.println(9.9); System.out.println(-9.9); System.out.println("========================"); //字符常量: System.out.println('1'); System.out.println('b'); // System.out.println('java');//报错,不能有多个字符 System.out.println('');//报错,不能没有字符 System.out.println(' ');//不报错,输出一个空格字符 System.out.println("========================"); //字符串常量 System.out.println("java"); System.out.println("a"); System.out.println("");//可以没有字符 System.out.println("========================"); //布尔常量 System.out.println(true); System.out.println(false); //空常量 //System.out.println(null);//不可以输出 } }
3.4 进制
进制:进位计数制,是人为定义的带进位的计数方法。例如10进制,就是逢十进一,用0-9这10个数字表示。
计算机中常用的进制:
十进制:Java中,数值默认都是10进制。
二进制:以0b开头,b大小写都可以。用0和1表示。
八进制:数值前面以0开头。用0-7这8个数表示。
十六进制:以0x开头,x大小写都可以。16进制每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F16个大小不同的数,即逢16进1。
进制转换
十进制数据转成二进制数据:除基数(几进制)取余到排法
10进制转二进制
10进制转16进制
二进制数据转成十进制数据:使用8421编码的方式
二进制转十进制(8421): 10101 = 1*2^0 + 0*2^1 + 1*2^2 + 0*2^3 + 1*2^4 = 1 + 0 + 4 + 0 + 16 = 21
16进制转换为10进制
5a = 10* 16^0 + 5 * 16^1 = 10 + 80 = 90
二进制转换为八进制
将二进制数101110.101转换为八进制
得到结果:将101110.101转换为八进制为56.5
3.4 计算机存储单元
我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”,
通常用大写字母”B”表示,字节是由连续的8个位组成。
除了字节外还有一些常用的存储单位,其换算单位如下:
1B(字节) = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
3.5 数据类型
概念:Java是一个强类型语言,Java中的数据必须明确数据类型。
分类:基本数据类型和引用数据类型
基本数据类型:四类八种
引用数据数据类型:类、接口、数组
3.6变量
3.6.1 变量概念
变量本质上是一小块内存空间。
编程的本质就是对内存中的数据访问和修改。程序所用的数据都会保存在内存中,程序员需要一种机制来访问或修改内存中的数据。这种机制就是变量,每个变量都代表了某一小块内存而且变量有名字的,程序对变量赋值,实际上就是把数据装入该变量所代表的的内存区的过程。程序读取变量的值,实际上就是从该变量所代表的内存区取值的过程。形象的理解,变量相当于一个有名字的容器,改容器用于装各种不同类型的数据。
数据类型 变量名 = 初始化值; // 声明变量并赋值 int a = 18; // 创建了一个变量 System.out.println(a); // 先声明,后赋值(使用前赋值即可) 数据类型 变量名称; // 创建了一个变量 变量名称 = 数据值; // 赋值,将右边的数据值,赋值交给左边的变量 double b; b = 55.5; System.out.println(b); 还可以在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。 int c = 10, d = 20; // 定义int类型的变量c和d,中间使用逗号隔开 System.out.println(c); System.out.println(d);
使用: 通过变量名访问即可。 //定义变量 int a = 10; //输出变量 System.out.println(a); 修改: //修改变量 a = 20;//再次为a赋值,原来的10就没有了,所以输出的是20 System.out.println(a);
/* 使用变量的时候,有一些注意事项: 1. 在同一对花括号中,变量名不能重复。 2. 变量在使用之前,必须初始化(赋值) 3. 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。 4.定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。 5. 如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。 6. 变量使用不能超过作用域的范围。 【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止。 */ public class Demo03 { public static void main(String[] args) { int a = 10; System.out.println(a); //错误,变量的名字不可以相同。 //int a = 20; //System.out.println(a); //定义int类型的变量b,未赋值 int b; //System.out.println(b);//错误的,没有值,不能使用 //long num = 9000000000;//90亿已经远远超过int类型的取值范围了 long num = 9000000000L;//9000000000L: long类型了 System.out.println(num); //float f = 6.6;//错误的,6.6默认double类型,占8个字节,而左侧float占4个字节 float f = 6.6F; System.out.println(f); { int num1 = 60; System.out.println(num1); // 60 } // int num1; // System.out.println(num1); // 已经超出了大括号的范围,超出了作用域,变量不能再使用了 } }
3.7 类型转换
在java程序中,不同的基本类型的值经常需要进行互相转换。为此java提供了两种类型转换方式,自动类型转换和强制类型转换。
自动类型转换:
把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的。
取值范围从大到小
注意:boolean类型不能与其他基本数据类型相互转换。
强制类型转换:
是按照 目标类型 变量名 = (目标类型)数据变量 这种转换规则进行转换的
强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量;
示例代码
/* 在java程序中,不同的基本类型的值经常需要进行互相转换。为此java提供了两种类型转换方式,自动类型转换和强制类型转换。 自动类型转换: 把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的。 强制类型转换: 是按照 目标类型 变量名 = (目标类型)数据变量 这种转换规则进行转换的 强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量; */ public class Demo04 { public static void main(String[] args) { //自动类型转换 long num = 3;//右:int类型(4个字节),左: long类型(8个字节) System.out.println(num); //强制类型转换 long a = 5000000000L; int b = (int) a; System.out.println(b);//705032704,强制类型转换有精度损失问题 double c = 34.09999; float d = 34.09999F; int e = (int)c; int f = (int)d; System.out.println(e); System.out.println(f);//小数在强制转换为int类型时都是舍去小数部分 } }
表达式类型自动提升
当一个算数表达式中包含多个基本 类型数值时,整个算数表达式的数据类型会发生自动提升。自动提升的规则为
byte、short、char 运算时直接提升为int 。
整个算数表达式的数据类型会和操作数中数据取值范围大的数据类型保持一致
/* 当一个算数表达式中包含多个基本类型数值时,整个算数表达式数据类型会发生自动提升。 规则: byte、short、char 运算时直接提升为int 。 整个算数表达式的数据类型会和操作数中数据取值范围大的数据类型保持一致 */ public class Demo05 { public static void main(String[] args) { byte a = 10; //byte b = a + 100;//编译报错,byte在参与算术元素会先转换为int,a+100结果为int类型不能直接赋值给byte类型 byte b = (byte) (a + 100); System.out.println(b); double c = 10.0; //float d = c + 1;//编译报错,整个表达式的数据类型和c保持一致,c+1的结果是double类型,不能直接赋值给float类型 double d = c + 1; float f = (float) (c + 1); System.out.println(d); System.out.println(f); } }
转换原理图
自动类型转换
强制类型转换
自动类型提升规则
3.8 标识符
标识符:用于给程序中变量、类、方法命名的符号。
规则:
由字母、数字、下划线“_”、美元符号“$”组成,数字不能开头。
不能使用java中的关键字作为标识符。
标识符对大小写敏感(区分大小写)。
Java中标识符的命名约定:
小驼峰式命名:变量名、方法名
首字母小写,从第二个单词开始每个单词的首字母大写。
大驼峰式命名:类名
每个单词的首字母都大写。
另外,标识符的命名最好可以做到见名知意
例如:username、studentNumber等。
/* */ public class Demo06 { public static void main(String[] args) { int a2;//正确的 //int 2a;//错误的,不能以数字开头 //int class;//错误的,不能是关键字。 //int a-b;//错误的,不能包含- int _a_b;//正确的 //按照小驼峰式定义变量名 int studentAge = 18; } }
关注公众号,可以获取文档、代码、笔记、项目