Java 黑马最新29期基础班 第一天导师讲义,很适合初学者

今日内容

  • Java语言背景介绍
  • Java开发环境搭建 (必掌握[配置])
  • HelloWorld案例 (必掌握[练习]) ★★★★★
  • Java基本语法(变量的定义)★★★★★

  • 注释,关键字,常量,数据类型,变量,标识符
  • 类型转换

1. Java语言发展史

  • Java语言是由谁, 在哪家公司开发的?
	答案:詹姆斯·高斯林在SUN公司开发出来的,后来被Oracle公司收购!
  • Java语言的发展史?【不要刻意去记忆】
1995年Sun公司发布Java1.0版本
1997年发布Java 1.1版本
1998年发布Java 1.2版本
2000年发布Java 1.3版本
2002年发布Java 1.4版本
2004年发布Java 5.0版本		-> Java语言发展的里程碑
2006年发布Java 6.0版本
2009年Oracle甲骨文公司收购Sun公司,并于2011发布Java 7.0版本
2014年发布Java 8.0版本		-> 市面上常用的一个版本, 课程中所使用的版本

2017年发布Java 9.0版本		
2018年3月发布Java 10版本
2018年9月发布Java 11版本		
2019年3月发布Java 12版本

总结:
	Java语言与1995年所研发出来的, Java在5版本出现了很多突破性的技术点,市面上使用最多的就是8版本。
	以后我们在开发中使用软件都不会是最新版本,而是次级稳定版本!【公司中使用8.0最多的!】	
  • Java语言的平台划分?
1. JavaSE : Java语言的基础语法,基础班学习的就是JavaSE
	学习完JavaSe可以实现简单的桌面应用开发 (坦克大战,飞机小游戏)

2. JavaME : 是用于嵌入式移动设备的程序开发,例如在早期Nokia手机上的一些应用。
	JavaME目前已经退出历时舞台了,市面上不再招聘该类程序员。【被Android和iOS所取代了。】

3. JavaEE : 是用于Web网站方向的技术开发 【我们学习的最终方向】
	Web网站 :
		网页 :	一套没有逻辑,专门用于展示数据的界面而已。
		网站 :  基于前台的网页 + 后台的逻辑配合在一起的, 才叫网站

2. Java语言的跨平台原理

  • 什么是跨平台?
平台 : 操作系统
	window系统
	Mac OS 系统
	Linux系统
  • 跨平台的原理是?

通过虚拟机实现的!我们编写的同一份Java代码,只需要在不同操作系统中安装不同版本的虚拟机就可以了【虚拟机其实就是一款软件】

  • JVM本身可以跨平台吗?
总结: 不跨平台的!有不同版本的!(不同版本的JVM对应着不同的操作系统)  【我们应该使用Windows版本的虚拟机JVM】

3. JRE和JDK

  • 什么是JDK?
  • 什么是JRE?
  • 什么是JVM?
  • 三者之间的关系是什么?
总结 :
	1.jvm?
		它是Java实现跨平台的基石,通过不同版本的JVM,能够让同一个java程序在不同的平台(操作系统)运行起来!
	2.jre?
		作用:java程序运行环境!【可以让一个已经存在的java程序运行起来】
		jre包含了jvm和核心类库
			类:java程序运行的最小单位
			类库:里面包含了很多的类【这些类库都是jre自带的】
	3.jdk?
		作用:java程序开发工具包【要想进行java开发,就必须有jdk】
		jdk包含了jre已经开发工具
			开发工具:比如javac.exe java.exe
	
	4.关系:   jdk>jre>jvm		
结论 :
	以后,我们进行java开发,只需要有jdk就可以了!【如果希望程序在windows系统中运行,那么我们就需要使用windows版本的jdk,想要让程序在Linux系统中使用,那么只需要使用Linux版本的jdk】

4. JDK的下载和安装

  • A:JDK的下载

  • a:官网 http://www.oracle.com 【必须处于联网状态】

  • B:JDK的安装

    建议★★:安装目录不要有中文和空格(特殊符号),以后安装所有的软件,目录结构请统一

    目前,我的电脑使用你的是jdk8!

    ​ 在基础班,我们使用11版本没有问题,到就业班的某个时间点,会切换到1.8。

  • a:傻瓜式安装
    * 双击安装程序,然后一路next即可(但是不建议)【目录不要放在系统盘】

    • b:安装的推荐方式
      • 安装路径不要有中文或者特殊符号如空格等。
      • 所有和开发相关的软件最好安装目录统一。
        • 举例:我的JDK安装路径
          • D:\Develop\jdk11
  • C:验证安装是否成功

    • a:通过DOS命令,切换到JDK安装的bin目录下。
      • D:\develop\Java\jdk1.9\bin
    • b:然后分别输入javac和java,如果正常显示一些内容,说明安装成功
目录名称				说明
bin					该路径下存放了JDK的各种工具命令。javac和java就放在这个目录
------------------------------------------------------------------------
conf				该路径下存放了JDK的相关配置文件
include				该路径下存放了一些平台特定的头文件
jmods				该路径下存放了JDK的各种模块
legal				该路径下存放了JDK各模块的授权文档
lib					该路径下存放了JDK工具的一些补充JAR包
  • 5分钟时间自己操作一遍

5. 常用的DOS命令

  • 为什么要学习命令提示符?
  • 如何打开命令提示符(DOS窗口)?
总结:
	1. 为了调用jdk提供给我们的工具
	2. 为了后期我们学习Linux系统做的一个准备
	
如何打开?
	按下win+r(同时按下), 输入cmd,回车
  • 盘符切换 盘符名: 最后按下回车
    * 进入文件夹 cd 文件夹名称
  • 回退上一级 cd…
    * 退出到根路径 cd\
  • 查看当前目录下的文件和文件夹 dir
    * 清屏 cls
  • 退出 exit
1. calc	-> 打开计算器
2. notepad -> 打开记事本 ★★★★★

6. Path环境变量的配置

  • 为什么要配置环境变量?
  • 如何配置?
总结:
	1.在没有配置环境变量的时候,要想使用开发者工具,必须进入bin目录!为了方便使用这些命令,而不用每次都进入bin目录,我们可以通过配置环境变量来完成!
	2.
		右键我的电脑---->>> 属性----->>>高级系统设置----->>>环境变量----->>>在系统变量中点击新建---->>变量名称必须是 JAVA_HOME ,变量值是jdk安装的目录(不包含bin目录)---->>> 选中系统变量中的path,进行编辑---->>>将jdk环境变量设置进去(最左侧输入: %JAVA_HOME%\bin;)
	注意:win7中,修改path中的值,请先将里面的数据备份一下
  • 问题:
环境变量失效问题
	Win10, 重启电脑之后, 可能就会失效
	解决方案: 找到环境变量的path, 进入编辑文本, 不需要修改任何内容, 直接确定即可

7. HelloWorld案例

  • Java程序开发运行的基本步骤是什么?
总结:
	1. 编写一个java源代码程序(java文件)  【普通人,也就是程序员能够看懂的!】
	
	2. 编译java源代码成为字节码文件 【字节码文件.class 计算机可以读懂】
	
	3. 让机器运行这个字节码文件	
	
	以后我们编写的代码都在内存中运行的!(JVM中)
  • HelloWorld的基本书写 (暂时记忆,里面的内容必须与下面的完全一致)
总结:
	public class HelloWorld{
        public static void main(String[] args){
            System.out.println("HelloWorld");
        }
    }	
  • 编写前的注意事项
检查文件后缀名是否是隐藏的, 避免创建出来的不是.java文件
  • 10分钟时间练习
    * 使用java程序,在屏幕上输出自己的姓名。

8. HelloWorld案例常见问题

  • 总结
1. 中英文符号问题  (;写成了;)
2. 单词拼写错误  (main写成了mian)
3. 字母大小写没有区分 (System写了system)
4. 忘记书写了分号 
5. 执行编译命令,写成了 javac xxxx(忘记了.java)
6. 执行运行命令, 写成了 java xxxx.java (多了.java)
7. 类名(Demo)与文件名(HelloWorld)不一致!
  • 请找出下方HelloWorld案例的错误, 并修改
public class Demo {	
	public static void main(String[] args) {
		System.out.println("HelloWorld");
	}
}
问题:类名(Demo)与文件名(HelloWorld)不一致!

9. Notepad++ 软件的安装和使用

  • Notepad软件安装后的设置
设置 -> 首选项
	A. 新建 -> 默认语言Java	-> 文件编码ANSI
	B. 自动完成
  • 5分钟时间安装并配置

10. 注释

  • 什么是注释?
  • 注释的分类?
  • HelloWorld说明
总结:
	1. 注释是给程序员(给人看的)看的,方便对代码的理解!【机器会忽略注释的内容】
	2. 注释分为 单行注释、多行注释、文档注释!
		单行注释:
			写法:  // 注释的具体内容
		
		多行注释:
			写法: /* 注释的具体内容  */
		
		文档注释:
			写法: /** 注释的具体内容  */
★★★★★ 以后只要修改了java源代码,都需要重新编译,再去执行!
/**
	这是一个文档注释:一般都在类上面使用!
	下面书写了一个HelloWorld类(打印输出一句话:王云飞)
	
	定义类的格式: public class 类名{}
*/
public class HelloWorld{
	/*
		这是一个多行注释,定义了一个主方法(方法:我们现实生活中所谓的功能)
		主方法,它比较特殊,是整个java程序的入口,JVM它会从main方法开始执行!	
	*/
	public static void main(String[] args){
		// 这是一个单行注释,就是在控制台打印一句话!
		System.out.println("王云飞");
	}	
}
注意: 
	注释允许嵌套使用, 但仅限于单行注释
	注释的内容是不会参与程序的编译和执行的.

11. 关键字

  • 什么是关键字?
  • 关键字有哪些特征?
总结:
	1. 在java中被赋予了特殊含义的单词 (以后我们在定义一些内容<比如变量>就不能使用这些关键字)
	2. 【如何识别关键字】
		在高级记事本中,它的颜色比较特殊的!
		字母都是小写的!
	
	在java中关键字非常多!是不是每一个都需要记忆?
		每天我们都会接触少量的关键字(经过大量的练习,当天记忆一下,随着时间的推移,都是没有问题的)

问题: main是关键字吗?
答 : 不是关键字,但是可以理解为比关键字更为关键的一个单词,因为JVM虚拟机在执行的时候, 只会查找main这个方法的名字.

12. 常量

  • 什么是常量?
  • 常量的分类有哪些?
总结:
	1. 在程序运行中,固定不变的量。
	2. 常量的分类:
		字符串常量: 只要是使用双引号包起来的内容就是字符串常量,比如 "abc" "王云飞"
		字符常量:只要使用单引号包起来的内容就是字符常量,比如 'a' '100'
		整数常量:就是书写的整数数字(不能有小数点),比如 10,-25
		小数常量:数字,带有小数点,比如 10.25 -3.14
		布尔常量:就只有2个取值,分别代表真(true)、假(false)  
		空常量:只有一个取值 null 【不能直接打印】

  • 10分钟时间练习
    请在屏幕上输出一个学生的信息,包含姓名、性别、年龄、身高、地址。
public class Demo2{
	/*
		需求: 姓名、性别、年龄、身高、地址。
	*/
	public static void main(String[] args){
		System.out.println("张三");
		System.out.println('男');
		System.out.println(23);
		System.out.println(180.1);
		System.out.println("北京市昌平区金燕龙办公楼一层");
	}
}

13. Java中的数据类型

  • 为什么要有数据类型?
  • Java的基本数据类型一共分为哪些?
总结:
   1. 在计算机中存储数据都是在内存中,占据一定的空间!占据空间需要有单位!在计算中,最小的存储单位是位(bit)【在计算机中存储的任何数据都是0 1(二进制数据,只有0和1)】【十进制10用二进制1010表示】,其中里面的0或者1都是一个bit,每8个位(bit)就构成了1个字节(byte) =====>>> 我们为了方便统计数据,都会使用字节(byte)来作为最小单位!
    1KB = 1024byte
    1MB = 1024KB
    1GB = 1024MB
    1TB = 1024GB
    有了数据类型能够存储不同长度的数据,达到节省空间的效果!
    
   2. java数据类型划分 
    基本数据类型(★★★★★):四类八种!
    	整数类型: byte short int(默认) long
    		byte的最大取值是127! 
    	浮点数类型:float double(默认)
    	   	
    	字符类型:char
    		
    	布尔类型:boolean
       
    引用数据类型:后续课程学习!【数组、接口、类等等……】
    
   注意:数字的类型取值范围大小依次是 byte short int long float double
     
注意:
	数值的取值范围跟字节占比大小不一定相关
	数据类型从小到大
		//TODO: 
			byte - short - int  - long - float - double
			问题: 为什么float占4个字节, 取值范围却要比8个字节的long还要大呢??
			System.out.println(Float.MAX_VALUE - Long.MAX_VALUE);
		原因: 底层的二进制存储结构不同   (了解)
重点记 :
	所有整数默认都是(int)类型				System.out.println(10);
	所有小数默认都是(double)类型			System.out.println(10.0);

14. 变量

  • 什么是变量?
  • 变量的格式是?
  • 变量的作用?
总结:
	1. 程序在运行中,数值可以发生改变的量!
	2. 变量的组成部分(数据类型 变量名称 数值)
		格式: 数据类型 变量名称 = 数值 ; 例如: double num = 3.14;
	3. 提高代码的重用性(不要修改很多地方,只需要修改变量的值就可以了)

变量的操作:
	定义变量:  int num = 10;  【定义num变量的类型为int,就只能给int类型的数据!】
	修改变量的值: num = 100;
	获取变量的值:直接操作变量名称即可  打印: System.out.println(num);

	其它数据类型:
		char c = 'a'; // 定义一个字符类型的变量,名称为c,值为'a'
		boolean b = true; // 定义了一个布尔类型的变量,名称为b,值为true			
总结: 今后定义整数类型变量的时候, 先用int, 如果int装不下了, 用long, 定义long类型变量的时候需要加入L的标识.
	 今后定义小数类型变量的时候, 先用double, 非要用float的话, 需要加入F的标识.

	3. 就是用来记录不断发生改变的常量.
  • 变量的扩展讲解:
1. 变量可以先定义, 再赋值.(也可以在定义的时候直接赋值) 【必须掌握】
	int a;
	a = 100;
	说明: 如果这个变量定义在方法的内部,它就是一个局部变量,一定要先赋值(初始化),然后再使用,否则就会报错!

2. 一条语句可以定义n个变量.【能够看懂就行】
	例如:int x=10,y=20,z=30;
	还可以,先定义,后赋值!
		int x,y,z;
		x=10;
		y=20;
		z=40;
说明:以后建议大家定义变量的时候,使用上面的方式(每个变量的定义单独写,阅读性强!)
  • 10分钟练习: 请分别定义byte、short、int、double、char以及boolean这6种类型的变量,并将值输出到屏幕上。

15. 变量的注意事项

1. 变量定义的注意事项:
		变量名不允许重复定义.【在同一作用域中:目前就是在main方法中】
			int a = 10;
			int a = 20;		// 这句话就会出现编译错误.
		
		访问变量,不能超出变量的作用域
			{
                int m = 50; // 这个变量m只在当前{}中有效!
            }
            System.out.println(m); // 编译报错!已经超出了变量m的范围
2. 变量使用的注意事项:		
		如果定义了一个long类型的变量,赋值超过了int类型的最大值,需要在后面加上L

3. 变量使用的注意事项:
		变量使用之前(必须是一个局部<方法内部的变量>), 必须完成赋值.
        比如定义的变量在类中,方法的外部(全局变量),可以不赋值,直接使用【默认值】
4. 变量的使用注意事项:
		如果定义一个float类型的变量,需要在小数的后面加上一个F
		float num = 3.14; // 错误,小数默认是double类型,将一个double赋值给float类型的变量,报错!
  • 细节:
1. 定义long类型的变量, 需要加入L的标识
2. 定义float类型的变量, 需要加入F的标识

16. 标识符

  • 什么是标识符?
  • 标识符的组成规则?
总结:
	1. 自己起的名字 【自己去定义的】
		自己给类, 变量, 方法... 起的名字
	2. 
		26个英文字母大小写都可以(严格区分大小写)
		数字0-9
		_ $

		建议 : 自己起名字的时候, 要做到见名知意
				int age = 18; // 变量age代表的是年龄
				
			  大部分情况,我们定义标识符的时候,都是用的是单词!【可以选择拼音!】
	3. 标识符组成的注意事项【硬性要求!不遵循,会报错的!】
			A. 数字不能开头
			B. 不能使用关键字命名
			C. 中间不能以空格分隔.
标识符的命名规范 (江湖规矩) 【软性的要求:不要找要求,显得不够专业,low】
	小驼峰式命名:变量名、方法名
		首字母小写,从第二个单词开始每个单词的首字母大写。firstName

	大驼峰式命名:类名 FirstName
		每个单词的首字母都大写。

	另外,标识符的命名最好可以做到见名知意 
		例如:username、studentNumber等

17. 类型转换

  • 类型转换的分类有?
  • (隐式)转换指的是?
  • (强制)转换指的是?
总结:
	自动类型转换:我们不用自己写代码处理!
		将小范围数值赋值给大范围的变量  double d = 10;
	
		规律: byte ----->>> short ----->  int ----->  long ------> float -----> double
	
	强制类型转换:写代码手动完成!【慎用!】
    	将大范围的数值赋值给一个小范围的变量   int num = 10.5; // 编译报错!不能直接将double类型的数值赋值给一个int类型的变量!
    	可以进行强制转换:小范围的数据类型 变量名称 = (小范围的数据类型)大范围的数据;
    		int num = (int)10.5; // 不推荐!丢失精度!(将小数点后面的数据丢掉!)
    	
    	
    	强制类型转换,还存在数据溢出问题!(将满满的一桶水倒入一个水杯)
    		int count = (int)100000000000000000L; // 语法没有任何问题,但是执行之后存在数据溢出问题。
    
    char类型不参与 byte和short的转换!
    
    boolean不涉及类型转换!(只存在于数值)
      

面试题:问题: 下面的程序是否有问题,如果有问题,请指出并说明理由(必须掌握!!!)

​ byte b1 = 3; // 数值3是一个常量(整数类型的常量) 没问题!
​ byte b2 = 4; // 没问题
​ byte b3 = b1 + b2; // byte或者short类型参与运算,会先将byte或者short提升为int

​ // b1和b2都是变量!语法检测的时候,不关注数值(变量的数值会改变),

错误原因: 因为所有整数默认都是int类型, 所以b1和b2相加的时候, 会先将自己提升为int类型
		 两个int相加的结果还是int, 将int结果赋值给byte, 必须加入强转
解决方案: byte b3 = (byte)(b1 + b2);
	byte b = 3 + 4;	 // 这句话不会出现编译错误
	原因是3和4是两个常量, Java有常量优化机制, 在编译的时候就会将3和4计算出一个结果
	并自动判断结果是否在byte的取值范围内.
	double d = 20;
	System.out.println(d); 	// 20.0;

	long l = 10L;			// 这里不存在编译错误, 因为10默认是int类型, 小的给大的赋值, 可以直接赋值
	System.out.println(l);

	long l2 = 12345678998765432L;

18. 今日作业支撑

  • 字符串的+号串联

今日目标

能够说出Java语言的跨平台原理

通过JVM实现,不同操作系统,只需要有不同版本的JVM即可!

能够独立下载并安装JDK

在公司中,JDK版本都是统一的!

能够独立配置path环境变量

一台电脑安装了多个JDK?哪一个生效?环境变量的配置!

能够独立编写HelloWorld案例并编译执行

原封不动的copy

能够说出Java中的8种基本数据类型

整型:byte short int long

浮点型:float double

字符型:char

布尔类型:boolean

能够定义基本数据类型的变量并使用变量名输出

格式: 数据类型 变量名称 = 数值;

能够说出标识符的命名规则

允许出现的: 26个字母(区分大小写)、数字、下划线_、美元符号$

硬性要求:不能以数字开头、不能使用关键字、不能出现允许出现内容以外的!

软性要求:变量、方法名称使用小驼峰;类名使用大驼峰!【见名知意!】

能够说出基本数据类型之间相互转换的规则

char不与 byte和short进行类型转换,boolean类型不参与!

自动转换:小范围数值赋值给大范围的变量;

byte—> short ----> int ----> long ----> float —double

char—> int ----> long ----> float —double 我们可以将汉字作为数字处理! 10 1010 万国码

强制转换:大范围的数值赋值给小范围的变量;

大范围的数值赋值给一个小范围的变量; int num = (int)10L;

​ // 精度丢失!

// 溢出!

long b1 = 1212321321311; // 常量值给变量名称,编译阶段,只要数值不超过范围,就通过!

long b2 = 1212321321321;

long b3 = b1+b2; // 变量,编译,只要语法正确就行! long+long = long

你可能感兴趣的:(JAVA,传智播客黑马,讲义,基础班)