第一天
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也是需要不断努力和进取的.相信自己后面一定可以达到自己想要的水平.