2021-07-10

                                               第一天

1java语言的特点:

    面向对象的一种 

​    跨平台型

​    开源

2.开发一个java应用程序

 jvm:是java虚拟机,一个假想计算机,能够处理java程序;public static void main(String[] args):能够被jvm来调用

 jdk:java开发工具包:里面包含jre以及一些开发工具的包

 jre:Java运行环境  包含jvm以及Java所需的核心类库

常用的dos命令

1.罗列某个盘符下的所有的文件夹以及文件详情信息   		dir
2.盘符切换   									盘符号:(不区分大小写)
3.改变目录/文件夹结构  							cd 文件夹/目录名称
											  cd  路径
4.回退上级目录                                  cd ..
5.回退根目录                                    cd \

6.创建文件夹/目录                               md 文件夹/目录名称
7.删除文件夹/目录                               rd  文件夹/目录名称:必须为空目录
8.删除带内容的目录(询问删除)                      rd /s 带内容的目录名称
9.删除带内容的目录(不询问)                        rd /s /q 带内容的目录名称
10.创建文件                                    copy con 文件
11													输入内容 ctrl+z 回车
12.创建文件 echo 内容 > 文件
-- 			echo hello,javaee > a.txt

13.清屏命令: cls
14.查看ip ipconfig
15.检查自己本机是否和其他主机进行通信   ping ip地址/域名

3配置环境变量

下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

1)环境变量配置:

 配置path环境变量的原因:
				我们需要在任何目录下使用javac和java对Java源文件进行编译和运行
			

​		方式1:(存在弊端)
​				win10/win8---->此电脑---->右键属性---->高级系统设置---->环境变量
​				
​				---->系统变量  找到path将jdk安装目录的bin路径复制到path里面即可!


​				path: D:\develop_software\Java\jdk1.8.0_162\bin

​		弊端:	
​				1)当jdk版本升级了,开发者需要手动更改path:可能造成的path其他变量更改了,所以不好!		
​					
​				2)二阶段使用tomcat服务器(使用java编写的),启动的时候会寻找计算机中系统变量中的path是否存在
​				JAVA_HOME,如果找不到,服务器启动时候出现"闪屏";

​       (推荐)使用方式2:
​		win10/win8---->此电脑---->右键属性---->高级系统设置---->环境变量---->系统变量
​			新建变量名:
​					JAVA_HOME
​			变量值:
​					D:\develop_software\Java\jdk1.8.0_162

​			优点:
​			1)不需要手动更改path
​			2)tomcat服务器启动的时候,找到JAVA_HOME变量,就不会出现闪屏

path环境变量的执行流程:

写好了java文件,对java文件进行编译和运行;
			1)首先需要在dos中找到java文件的目录,如果找不到
			2)就会在path环境变量中找
				
				%JAVA_HOME%\bin
				
			3)如果path中都没有这个文件,那么久会提示 找不到文件...

​         classpath:临时环境变量(了解)
​	
​    	在win10/win8---->此电脑---->右键属性---->高级系统设置---->环境变量--->系统变量
​	
​	    新建变量名:classpath
​	    变量值:
​		D:\EE_2106\day01\code\01_HelloWorld

​		classpath执行流程:是现在 系统变量中寻找是否存在classpath的路径
​		如果存在优先的是这里面的xxx.class文件

第一个程序

class HelloWorld{

		public static void main(String[]   args){

                                       System.out.println("javaEE,你好!!") ;
		}

}

java中的注释

1.//单行注释
2./*
多行注释
*/
3./***/文档注释

4.什么是关键字:

被Java语言赋予特定含义的单词!			而且在高级记事本以及开发工具中,针对"关键字"有一种特殊颜色标记!​       关键字:			​		        class	:表示创建一个类(是Java最基本的单元)	​		        public  :权限修饰符的一种 :公共的,公开的,访问权限足够大​		        static  :后面面向对象部分讲: 静态修饰符号​		        void    :和Java中的方法有关系 (讲Java方法的时候去说)

5.什么是标识符,标识符的组成规则及注意事项

	给包,类,接口,变量,方法,常量等起名字的字符序列!	组成规则:(见名知意)		1)26个英文大小写字母		2)数字字符		3)$		4)_		严格区分大小写		包的命名:公司域名反写包:	开发中:针对包:多级包,中间使用.隔开(代码需要分层的)		1)字母全部小写				com.qf						com							qf										xx.java文件


类和接口 的命名规则:

单个单词:首字母大写,其余小写			class Hello{}   多个单词:每个单词首字母都大写,其余小写(大驼峰命名法)			class HelloWorld{}    给变量/方法名命名规则:	单个单词:字母全部小写 			main(String[] args)			int apple = 10 ;	多个单词组成:(小驼峰命名法)		第一个单词字母小写,其余每个单词首字母大写,其余小写				checkUserName()			checkUserPassword()	给常量命名规则:	单个单词:				单词字母全部大写				HELLO	多个单词:开发中,都是自定义常量(final) 使用多个单词		Thread类:线程类		public static final	int	MIN_PRIORITY = 1 ; 最小优先级

6什么是Java中的常量?

在程序的执行过程中,其值不发生改变的量!分类:	1)字面值常量		字符串常量:使用双引号包裹起来的内容:称为"字符串常量"					举例: "我爱中国"​```javaclass ConstantDemo{				public static void main(String[] args){					System.out.println("hellWorld") ;			System.out.println("我爱中国") ;        }}​```​		字符常量:使用单引号包裹起来的内容​				举例: "你"     'abc' 非法数据(只能单引号括起来的单个内容)​		整数常量:​				100			包含"进制"    整数----默认十进制​	    布尔常量:true false​		空常量:null		​					引用数据类型默认值null进制也属于常量:​          二进制表示方法:0bmmm​         八进制表示方法:0mmm​        十进制表示方法:mmm​        十六进制表示方法:0xmmm

进制用java程序解:

class ConstantDemo2{		public static void main(String[] args){							System.out.println(0100) ; //八进制				System.out.println(0b100) ;//二进制				System.out.println(100) ;//十进制				System.out.println(0x100) ;//十六进制		}	}

​ 第二天

1.8421码

每一个二进制数据都是1 ,都对应固定的十进制数据8421码快速进制转换  十进制---二进制  二进制---十进制
1   1   1   1   1   1   1   1128 64  32  16  8   4   2   1

2有符号位的计算

计算机对数据的运算---底层是补码计算!原码    反码    补码  正整数/负整数的原码,反码,补码的规则!正数 原码=反码=补码负数 原码--->反码  1变0 0变1    反码--->补码   末尾加1

3什么是变量,以及变量的分类,以及注意事项

在程序运行过程中,其值发生变化的量        1)数据类型		2)变量名称:满足标识符规则		3)初始化值:满足的范围即可!				数据类型 :在Java中,数据类型分为两大类型:			A)基本数据类型:四类八种   (研究的都是基本类型)			整数类型:默认int					byte   字节类型     占1个字节(8个比特位) 取值范围必须记住:-128~127					short  短整型       占2个字节					int    整数默认类型 占4个字节					long   长整型       占8个字节					注意事项:必须在long的初始化值的末尾加L或者l					浮点类型:默认类型double			        float   单精度      占4个字节					注意事项:float f = 12.56F ; //后面加上F或者f					double  双进度      占8个字节														字符类型 :char	占两个字节					初始化值:单引号括起来的单个内容														布尔类型							boolean					不会参与类型转换:仅仅表示真,假					占1个字节					要么是true/要么false														B)引用数据类型:数组,类,接口	定义变量的注意事项: 	1.在java语言(强类型语言:语法结构很严谨)中,同一个变量不能重复定义	(javascript语言:弱类型语言:可以去重复定义变量)	2.一行就写一个变量即可!  一行结束之后分号;(代码规范风格)	3.一行也可以定义多个变量(在面试题/笔试题中)	4.变量要么直接初始化,要么先定义,但是必须在使用之前对其进行初始化	

java中的运算符

算术运算符 :+ - * / %(模)  /:默认取整  %:求余数赋值运算符:将=号右边的数据赋值给左边类型的这个变量==:是比较运算符:比较两个数据相等关系(比较运算符):!=,<,<=,>=,>,==无论我们的表达式是简单还是复杂的,最终比较运算符的结果不是true,就是false逻辑运算符位运算符		&,^,|		<<		>>		>>>三元(三目)运算符

什么是隐式转换,显示转换(强转)

		隐式转换:隐式类型提升:byte,char,short三者之间不转换,一旦参与运算,优先提升为int类型再计算数据类型小的------>数据类型大的显示转换:将数据类型大的转换成数据类型小的格式:目标数据类型 变量名 =  (目标数据类型)初始化值 

++和–的运算方法

++/--:单独使用:无论在数据前还是后面:都是自增1或者自减1++/--:参与运算	在数据的前面:先去自增1或者自减1,然后参与运算	在数据的后面:先去运算,然后自增1或者自减1

​ 第三天

java中逻辑运算符

基本的逻辑运算符      逻辑单与:&     并列关系  有fslse则fslse      逻辑单或:|     或的关系(满足一个即可)有ture则ture      逻辑异或:^     相同则为false不同则为ture      逻辑非:!       非ture则false;非false则ture      class OperatorDemo{		public static void main(String[] args){				//定义三个变量		int a = 3 ;		int b = 4 ;		int c = 5 ;				//逻辑单与&		System.out.println((a>b) & (a>c)) ;//false & false 		System.out.println((a>b) & (a<c)) ;//false & true 		System.out.println((a<b) & (a>c)) ;//true & false		System.out.println((a<b) & (a<c)) ;//true & true 				System.out.println("--------------------------------------") ; 				//逻辑单或|		System.out.println((a>b) | (a>c)) ;//false | false 		System.out.println((a>b) | (a<c)) ;//false | true 		System.out.println((a<b) | (a>c)) ;//true | false		System.out.println((a<b) | (a<c)) ;//true | true				System.out.println("--------------------------------------") ; 				//逻辑异或^		System.out.println((a>b) ^ (a>c)) ;//false ^ false 		System.out.println((a>b) ^ (a<c)) ;//false ^ true 		System.out.println((a<b) ^ (a>c)) ;//true ^ false		System.out.println((a<b) ^ (a<c)) ;//true ^ true				System.out.println("--------------------------------------") ; 				//逻辑非!		System.out.println(!(a>b)) ;		System.out.println(!!(a>b)) ;		System.out.println(!!!(a>b)) ;			}          }
扩展逻辑运算符       逻辑双与&&       逻辑双或||       共同点:都是表示并列关系       不同点:逻辑单与&:无论左边的表达式ture还是false,右边都要执行             逻辑双与&&:具有短路效果:左边的表达式如果是false右边就不执行了             逻辑双||:右左边的表达式如果是ture,则右边的不执行了 class OperatorDemo2{		public static void main(String[] args){				//定义两个变量		int x = 3 ; 		int y = 4 ;				System.out.println("x:"+x+",y:"+y) ;		System.out.println("------------------") ;		//逻辑单&		//System.out.println(((++x)==4) & ((--y)==5)) ; //false		//System.out.println("x:"+x+",y:"+y) ;//4,3							//false   & false		//System.out.println(((++x)==3) & ((--y)==4)) ;		//System.out.println("x:"+x+",y:"+y) ;						//逻辑双与&&										//true    &&				false		//System.out.println(((++x)==4) && ((--y)==5)) ;							//false && false		System.out.println(((++x)==3) && ((--y)==5)) ;		System.out.println("x:"+x+",y:"+y) ;			}}

位运算符:<<: 将数据的补码进行左移动,右边不够的补0;将最高符位丢弃掉

特点:<<:将左边的数据乘以2的移动次幂

右移动 >> : 将数据的补码进行右移动;如果最高符号位为1,则左边补1;最高符号位为0,则左边补0;

特点:>>:将左边的数据除以2的移动次幂

无符号右移>>>:无论最高符号位是1还是0,左边始终补0

基本的位运算符号: 位于:& 位或:| 位异或:^ ~:反码

位异或^的特点:同一个数据被另一个数据位异或两次后,其值是他本身

举例

class OperatorDemo{		public static void main(String[] args){		//3位与4		System.out.println(3 & 4) ;//0		//3位或4		System.out.println(3 | 4) ;//7		//3位异或4		System.out.println(3 ^ 4) ;//7		//反码3		System.out.println(~3) ;//-4	}}	1)3 位与 &4  	分别计算出:3 和4对应的原码(二进制)	3	00000000	00000000	00000000  00000011  :原反补相同	4	00000000 	00000000	00000000  00000100  :原反补相同	位与&:有0,则0		00000000	00000000	00000000  00000011&()		00000000 	00000000	00000000  00000100	------------------------------------------------------	00000000	00000000	00000000  00000000		结果:0		位或|:有1,则1	00000000	00000000	00000000  00000011 |		00000000 	00000000	00000000  00000100--------------------------------------------------    00000000    00000000    00000000  00000111  补码-->反码--->原码		7		位异或^:相同则为0,不同则为1	00000000	00000000	00000000  00000011^	00000000 	00000000	00000000  00000100	------------------------------------------------	00000000    00000000    00000000  00000111		7		反码~:按位取反:0变1,1变0(全部要进行按位取反)		~3		00000000	00000000	00000000  00000011  (补码进行计算)~	    ----------------------------------------------------    11111111    11111111    11111111  11111100  (补码) 最高符号位 				数值位	1					1111111    11111111    11111111  11111100   补码	-													        1	---------------------------------------------------------------------	1					1111111    11111111    11111111  11111011   反码		1					0000000	   00000000    00000000  00000100  原码				

< E m p t y   M a t h   B l o c k > <Empty \space Math \space Block> <Empty Math Block>

class OperatorDemo3{	public static void main(String[] args){						System.out.println(2<<2) ;//2*2^2 = 8						System.out.println(24 >> 2) ;//24/2^2 = 6						System.out.println(-24 >> 2) ; //-6						System.out.println(-24 >>> 2) ;//1,073,741,818					}}		1)计算出2十进制---对应的二进制		00000000  00000000  00000000 00000010 :原反补相同				00000000  00000000  00000000 00000010	  (00)000000  00000000  00000000 0000001000	  	  000000  00000000  00000000 00 00001000  :补码--反码---原码:8	  	  	  2)24>>2 :计算出24对应的二进制	  	  00000000  00000000  00000000 00011000  :原反补相同	  	  00000000  00000000  00000000 00011000	    0000000000  00000000  00000000 000110(00)				0000000000  00000000  00000000 000110 :补码--反码--原码						6													3)-24 >> 2 				10000000  00000000  00000000 00011000 :原码		最高符号位			数值位		1				0000000  00000000  00000000 00011000		1				1111111  11111111  11111111 11100111   反码				+												   1		---------------------------------------------------------		1				1111111  11111111  11111111 11101000  补码				1				1111111  11111111  11111111 11101000		  111				  1111111  11111111  11111111 111010(00)				111				  1111111  11111111  11111111 111010 补码				-												   1		-------------------------------------------------------		111				  1111111  11111111  11111111 111001  反码		100               0000000  00000000  00000000 000110  原码				-											6							-24>>>2    1				1111111  11111111  11111111 11101000  补码	  001				  1111111  11111111  11111111 111010(00)  	00111111111111111111111111111010 补码-反码--补码		

三元(三目)运算符

表达格式:(表达式)? 1)执行ture的结果;2)执行false的结果:

举例:已知两个变量a,b分别进行初始化,求两个数据的最大值

class OperatorDemo{	public static void main(String[] args){		//定义两个变量		int a = 10 ;		int b = 15 ;				//(表达式)? 1)执行true的结果:2)执行false的结果;		//定义变量max		int max = (a>b)? a:b;		System.out.println("两个数据的最大值是:"+max) ;            }   }

键盘录入

流程:

1导包: 在java语言中:只要不是java.lang包下的类都需要导入!
位置:在class上面
import java.util.Scanner;
2固定格式: 创建键盘录入对象(文本扫描器对象)
Scanner 对象名 = new Scanner(System.in) ;

3开始录入数据 :使用int类型举例
Scanner类的功能

int类型: public int nextInt():录入下一个int类型;
int 变量名 = 对象名.nextInt() ;

String类型:public String nextLine();

​ String line = sc.nextLine();

4使用变量

举例int类型

import java.util.Scanner ;class ScannerDemo{		public static void main(String[] args){		//2)创建键盘录入对象(文本扫描器对象)		Scanner scanner = new Scanner(System.in) ;				//3)提示并录入数据		System.out.println("请您输入一个数据:") ;		int x = scanner.nextInt() ;				//4)使用这个数据		System.out.println("您输入的数据是:"+x) ;				System.out.println("-------------------------------------") ;						//创建键盘录入对象		Scanner sc = new Scanner(System.in) ;				//提示并录入数据		System.out.println("请您输入第一个数据:") ;		int a = sc.nextInt() ;				System.out.println("请您输入第二个数据:") ;		int b = sc.nextInt() ;				//三元运算符进行比较		int max = (a>b)? a: b ;		System.out.println("最大值是:"+max) ;	}}	

String类型

import java.util.Scanner ;class ScannerDemo2{		public static void main(String[] args){		//创建键盘录入对象		Scanner sc = new Scanner(System.in) ;				//提示并录入数据		System.out.println("请输入一个字符串数据:") ;		String line = sc.nextLine() ;		System.out.println("您输入的字符串是:"+line) ; //"helloworld"    }}

注意

1.同时录入两个String类型不会有问题

2.先录入String类型再录入int类型也没有问题SS

3.但是先录入int类型再录入String类型会有问提,会漏掉String类型的数据(原因:输入回车符号–>才能录入数据 ;回车符号—> (换行))

解决方案:

1):在录入字符串之前,新创建一个键盘录入对象

2):Scanner类提供了这个功能: String x = sc.next();

举例:

import java.util.Scanner ;class ScannerDemo3{	public static void main(String[] args){						//创建键盘录入对象		Scanner sc = new Scanner(System.in) ;		同时录入两个int类型		/*		System.out.println("请输入第一个数据:") ;		int a = sc.nextInt() ;						System.out.println("请输入第二个数据:") ;		int b = sc.nextInt() ;				*/				//同时录入两个String类型:字符串		/*		System.out.println("请输入第一个数据:") ;		String a = sc.nextLine() ;				System.out.println("请输入第二个数据:") ;		String b = sc.nextLine() ;		*/		//先录入String,在录入int		/*		System.out.println("请输入第一个数据:") ;		String a = sc.nextLine();		System.out.println("请输入第二个数据:") ;		int b = sc.nextInt() ;		*/				//先录入int,在录入String字符串		System.out.println("请输入第一个数据:") ;		int a = sc.nextInt() ;				//创建一个新的键盘录入		Scanner sc2 = new Scanner(System.in) ;		System.out.println("请输入第二个数据:") ;		String b = sc2.nextLine() ;				//String b = sc.next() ; //方案2				//"helloworld"---->底层存储---->'h','e','l','l','o'...						System.out.println("a:"+a+",b:"+b) ;		}

流程控制语句

​ 1)顺序结构语句
​ 进入到主程序之后,main方法被jvm调用之后
​ 代码依次由上而下进行执行!

​ 2)选择结构语句
​ if语句 switch语句
​ 3)循环结构
​ for
​ while
​ do-while语句

if语句的三种格式

格式一: 流程:

if(表达式){ 1)先判断表达式是否成立 . 2)如果成立,执行语句内容
语句; 3)不成立,不执行!
}

格式二:

if(表达式){ 流程:
语句1; 1):首先判断表达式是否成立,
}else{ 2):如果成立,则执行语句1:
语句2; 3):否则,不成立,执行语句2
}

格式三:

if(表达式1){                         执行流程	语句1;                             1):首先判断表达式1是否成立;如果成立,则执行语句1;}else if(表达式2){                     2):不成立,继续判断表达式2是否成立,成立,执行语句	语句2;                                如果上面都不成立,最终执行else里面语句;.........}else{	语句n;}

switch语句

格式:

switch(表达式){
case 值1:
语句1;
break ;
case 值2:
语句2;
break ;

default:
语句n;
break ;
}

流程:
1)使用switch中的表达式结果和case的进行匹配
2)case语句值1,匹配了,就执行语句1,break,结束switch语句
3)值1不匹配,继续判断值2是否和switch中的值匹配,
4)如果匹配了,执行语句2,break,结束switch语句
5)如果上面都是不匹配,最终执行default语句,语句n,break结束!

举例

键盘录入一个(1~7)的数,判断星期几

import java.util.Scanner ;class SwitchDemo{		public static void main(String[] args){		//创建键盘录入对象		Scanner sc = new Scanner(System.in) ;				//提示并录入数据		System.out.println("请您输入一个数据(1-7):") ;		int week = sc.nextInt() ;				switch(week){		case 1:			System.out.println("星期一") ;			break ;		case 2:        	System.out.println("星期二") ;			break ;	 		case 3:        	System.out.println("星期三") ;			break ;			case 4:        	System.out.println("星期四") ;			break ;			case 5:        	System.out.println("星期五") ;			break ;			case 6:        	System.out.println("星期六") ;			break ;			case 7:        	System.out.println("星期日") ;			break ;			default:			System.out.println("非法数据!") ;			break ;		}	}}

switch语句使用的注意事项:
1)case语句后面的值只能是常量,不能是变量(Java是一个强类型语言的:语法结构非常严谨)
javascript语言(前端):弱类型语言: switch语句的case后面既可以是常量,也可以是变量
2)书写switch语句的时候,case语句必须存在break语句,结束switch语句的!
如果没有书写break语句,会造成"case穿透!"现象
3)switch语句的结束条件
a)遇见break结束
b)程序默认执行末尾结束
4)default语句:可以在switch语句中的 任何位置
如果在语句中,必须携带break; 否则case穿透
如果在语句的末尾,break是可以省略的,不建议!

举例

class SwitchTest{		public static void main(String[] args){				//两个变量		int a = 3 ;		int b = 4 ;				switch(a){		default:			b ++ ;	//5  ,没有break		case 4:		    b ++;	//6		case 5:             b ++ ;		//7		}				//b的值是多少?		System.out.println("b:"+b) ;				System.out.println("--------------") ;				//两个变量		int x = 3 ;		int y = 4 ;		  		switch(x){		default:			y ++ ;						case 3:		    y ++;		//5		case 5:             y ++ ;				}		//y的值是多少		System.out.println("y:"+y) ;				System.out.println("--------------") ;				//两个变量		int m = 3 ;		int n = 4 ;		  		switch(m){		default:			n ++ ;			break ;						case 4:		    n ++;				case 5:             n ++ ;				}		//n		System.out.println("n:"+n) ;	}	}

总结

​ 经过一个周的系统学习,弥补了大二的好多知识点,从以前看到代码就烦到现在愿意看,愿意去分析,我觉得这就是这一个周最大的进步.从0到1也是需要不断努力和进取的.相信自己后面一定可以达到自己想要的水平.

上一篇:2021-07-10


下一篇:BZOJ-1012-[JSOI2008]最大数maxnumber(线段树)