目录
本周内容
DAY1
1.计算机的基础知识(应用/硬件/软件)
什么是计算机?
计算机的用途
计算机的硬件
计算机软件
软件结构的划分
软件开发
人机交互
人机交互的两种方式
常用的dos窗口命令
Java学习
Java职业发展规划
Java发展历史
Java语言完成的哪些事情
Java平台版本(重点)
关于Java语言特点以及jdk,Jre,jvm的介绍
有jdk--有jre---有jvm,开始编写简单的java程序
1)编写Java代码
2)将.txt后缀名改为.java文件
3)进入jdk安装路径的bin目录里面
4)在里面输入编译指令 javac 跟上java源文件名称xxx.java
5)运行类名.class (字节码文件) java 字节码文件的前缀就是类名
DAY2
1.Java环境变量的配置path(重点)
2.Java中的注释
3.Java中的关键字(识记,记忆)
4.Java中的标识符(识记,记忆)
5.Java中常量
Day3
1. 进制也属于常量的范畴!(进制的转换,不作重点,扫盲)
什么是进制?
进制的由来?
进制的分类
将任意进制转换成十进制
十进制转换成任意进制
2.变量(重点)
什么是变量?
学习Java编程语言,在Java中,如何定义变量?
2.1 变量的概念:三要素
两种定义方式
数据类型有哪些(识记)
定义变量的注意事项
变量的运算注意
Day4
变量的显示转换(强制类型转换,-->强转)
变量的面试题
扩展的算术运算符的特点
赋值运算符的面试题
逻辑运算符(扩展逻辑运算符的面试题
三元运算符
Day5
位运算符(了解)
键盘录入数据--->jdk提供文本扫描器java.util.Scanner
流程控制语句
位异或特点
键盘录入数据的操作步骤
心得体会
本周我们学习了,
计算机是一个能够高速处理海量数据智能电子设备.
由两部分组成: 软件和硬件
没有安装任何软件的计算机称为裸机.
科学计算:利用计算机完成数据的运算.
数据存储:完成一些文件的读和写,或者对一些数组内容排序...
计算机辅助设计:CAD工程制图...
人工智能:利用计算机模拟人工思维.
媒体应用:动画,视频...
计算机网络:网络也很重要,一个台计算机没有网络,类似于电话没有电话线一个道理.
概念:由电子,机械和光电元件组成的物理装置的总称.
组成:由CPU、主板、内存、电源、主机箱、硬盘、显卡、键盘、鼠标,显示器等等.
两种:
计算机软件:
dos系统,windows系统,Linux系统,MAC系统
在移动端:Android系统,ios系统
应用软件:
计算机上的安装的客户端软件,如QQ,办公软件wps,wegame软件,....
C/S结构 :Client-Server 客户端和服务器端交互
特点:
客户端软件必须升级才能使用服务器端的高版本功能!
典型的应用:QQ客户端,yy语音....
QQ客户端要想去发红包,如果当前版本比较低,必须升级才能使用高版本功能!
B/S结构(架构):Browser-Server 浏览器端和服务器端交互
特点:
只要保证你计算机上有浏览器,无论高版本还低版本都能够访问服务器!
典型的网站: 访问网易新闻等等网站
B/S 结构 后期需要掌握 浏览器(解析前端的页面的时候和服务器交互)
前端学习:Javascript
后端学习:JavaEE核心技术(servlet,服务连接器)
jsp:模板引擎
jdbc:java数据库连接
三阶段:
框架ssm
springboot+vue前后端分离项目
人脸识别
美团外卖
医疗平台--挂号系统
...
产品经理---规划
项目经理---人员配备,人员调度,指定需求,管理项目进度,把控项目质量 (技术选型)
组长(主程序员)---分配任务到其他程序员
程序员---按照模块开
从头开始干---根据需求分析---完成数据库表的设计 ---->按照模块编码 前端 /后端/测试/运维
软件:就是使用计算机的数据和指令的集合!
数据:组成软件的核心代码(计算机能够识别的代码)
指令:计算机的符号(dos窗口---windows+r键--输入cmd--->进入)
软件开发:使用开发工具制作软件
开发工具:
前期第一周:notepadd++高级记事本
后期:第二周开始 :idea开发工具软件 / 前端开发工具 HbuilderX 或者webstrom
人和人之间交流和沟通,使用人类语言
那么,人和计算机进行交流和交流,需要人输入的指令是计算机能够识别的符号!比如:在指定磁盘上创建一个文件夹
方式1:图形界面化(快速)
简单,直观,容易上手!(用鼠标操作即可,快速去创建文件/文件夹/删除等操作)
方式2:命令行方式(掌握指令)
现在是在windows系统上.
Java工程师 最起码以后企业里面.
可能是半个运维(Linux相关的指令起码20-40个指令),可能是半个测试,半个前端
方式2:命令行方式 基本操作
进入dos命令行窗口(dos控制台)
方式1: (推荐)
windows键+r键组合键------>输入cmd----->进入dos窗口
方式2:
在windows开始菜单----输入cmd---->打开命令行提示符(可以右键--以管理员身份打开)---->也就直接进入dos窗口了
1)盘符号的切换
盘符号不区分大小写: 回车即可
2)进入指定单个文件夹(目录) cd 目录名称
3)进入多级目录 cd 多级目录的路径
cd 将多级路径的名称复制过来(win10系统/win11系统 在dos窗口直接鼠标右键就粘贴了 )
4)回退上一级目录 cd.. 或者cd ..
5)如果现在处在多级目录路径上,想回退盘符根目录 cd \或者cd\
6)查看(罗列)这个盘符或者目录某个目录的详细信息 dir指令
7)清除屏幕指令 cls(clear scrren)
当你dos窗口上面有很多信息,将上面的信息不用了,删了,使用这个
8) 要在指定的目录里面创建文件夹(目录)
9)创建文件
copy con 文件名称带上后缀名 ----按回车键---进入编辑模式,书写文件内容,书写完成成之后,按---ctrl+z,编辑完成----回车即可!
10)删除指定的文件夹(目录) 注意事项:rd 文件夹名称(目录名称) 只能删除空目录
11) 删除文件 del 指定文件名称 也可以批量删除所有同名的后缀的文件
举例:del *.txt 删除所有带有.txt的文件
12) rd的扩展指令
在windows系统上,想删除带内容的目录(里面有文件或者子文件夹)
rd /s 文件夹名称(目录) :询问删除删除带内容的目录? y/n 选择y就是删除,n不删除
13)系统指令
查看ip地址 ipcon
ping ip地址或者域名:查看自己本机是否通信
ping指令(类似于 二战的时候:驱逐舰找潜艇,利用声呐系统)
36.152.44.95 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失)
往返行程的估计时间(以毫秒为单位):
最短 = 34ms,最长 = 35ms,平均 = 34ms
如果当前ping和别的计算机之间,如果通信不了,那么两台计算机的防火墙没有关闭,线下的时候,提前将电脑防火墙关闭
1)Java开发工程师(主业),毕业之后肯定需要从事这个岗位1-3年(3-5年)不等;
--->项目经理(pm认证 项目管理:不去做技术方面,管理项目进度,成本,人员配备)
--->架构师(系统设计,整个项目框架搭建)....
2)全栈工程师(可能一些自研:需要我们Java的写前端)
3)运维开发
4)测试开发:(白盒测试需要懂编码, Java/Python...)
Java之父 詹姆斯高斯林 1995年正式推出
Java图标 热气腾腾咖啡图标
sun公司都被oracle公司收购了,安装jdk---下载? 官网 www.oracle.com Java的jdk(软件工具包)--->每半年更新一个版本
大到物流系统,网银系统,医院系统以及互联网相关行业,小到超市以及便利店收银系统等等 都可以使用Java语言(360行业都会有)
JavaSE(Standard Edition): 针对桌面应用程序的解决方案
JavaME( Micro Edition) :针对嵌入式设备提供的一套解决方案
移动端:Anroid基于JavaSE,还需要anroid相关的广播,订阅,服务,,,
Ios系统基于C语言
JavaEE( Enterprise Edition) :针对企业级开发解决方案(以后就是搞这个的!) 学习JavaEE核心技术13种: Servlet ,Jsp ,Spring ,Springmvc, Mybatis, Springboot...
Java简单性,健壮性,分布式, (良好的移植性,开源)
JVM:Java Virtual Machine Java虚拟机
假象计算机,自己的网络,自己的内存区域等等;
Jre:Java Runtime Environment Java运行环境,所有的Java应用程序要运行,计算机上必须有Java环境的支持,没有这个东西,运 行不了,而Jre里面包含了Jvm以及Java程序运行时所有需要的核心类库
Jdk:Java Development Kit :Java开发工具包,里面有很多的开发工具 tools.jar包,里面有工具类(Arrays:数组工具 类,Collections:集合工具类...),还包括了jre
三者的关系:Jdk > Jre > Jvm (整个介绍:其实只需要安装jdk即可!)
dk的安装目录有bin目录----> javac.exe --- 编译的执行性文件 java.exe --- 运行的执行文件 都需在dos窗口里面用到.
//将java代码编写在这个jdk安装目录的bin里面,因为这里面有javac和java这两个指令!
//在jdk的bin里面新建.txt文件--->一定要显示后缀名(电脑上win10 查看---隐藏的后缀名勾上)
//HelloWorld.txt
//Java的最基本单元是类:
class 类名{ 类名:建议是和文件名称一致!
//main方法,程序的入口,能够被安装jdk-->jre--->jvm jvm能够识别这个main方法,解析Java程序
//固定写法
public static void main(String[] args){
//输出在控制台上一句话:"helloworld"
//固定格式:输出语句
System.out.println("helloworld") ; //"",在控制台上就可以将双引号的内容输出展示!
}
}
//举例
class HelloWorld{
public static void main(String[] args){
System.out.println("helloworld") ;
}
}
windows+r键--->输入cmd--->dos窗口进入
如果代码没有问题,正常就会产生一个类名.class文件 ---- 字节码文件 .class的前缀的名称是类名
jvm运行的.class文件
java 类名---回车即可
注意事项:
1)系统上一定将隐藏文件扩展名显示,否则成了.java.txt 其实还是.txt文件
2)写class 类名{} 前面class 写成了Class 错误的,Java严格区分大小写,定义类class定义
3)写public static void main(String[] args){}固定写法 时候,将p大写,void写成了viod都不行! 4)System.out.println("helloworld") ; 将第一个S小写了,不行,第一个S是大写(固定写法)
5)如果输出语句是中文,那么注意:计算机上的文件保存的格式 "utf-8"编码(一个中文对应三个字节) 而dos黑窗口里面的默认编码是GBK,所以需要将本地上文件---写设置为ASCII码表(支持gbk格式)
要将本地上文件---写设置为ASCII码表(支持gbk格式)! 打开java文件,以记事本方式打开,选择另存为--->编码格式 ASCII
不可能写的所有java文件都放在jdk的bin目录,这里面都是执行性.exe文件,都是在dos窗口用的
不小心删除.java文件(自己的文件),可能误删一些.exe文件,这个 时候jdk就出问题了,
需要配置全局的环境变量path,让我们的java文件可以在任何目录下都能够使用javac编译和java运行指令!
主要的配置的是Path(重点)
path:配置好之后,肯定需要现在进入到指令java文件所在目录里面,然后才去使用javac和java
path有两种方式配置:都分别说一下,说下优劣!
classpath(了解一下即可,以前很早使用 临时环境变量,现在使用非常少)
可以系统环境变量配置,classpath 指定为xx.class文件(字节码文件)地址
classpath配置的地址是D盘根目录的 HelloWorld.class
//单行注释
//这是我们的固定格式 定义类的格式
// class 类名{},类名建议和文件名称一致
class CommonsDemo{
/*
多行注释
*/
/*
这是main方法,jvm能够识别的程序入口
所有的程序入口都是main方法
这也是会固定的格式 public static void main(String[] args){}
*/
/**
文档注释,这是一个特殊,通过jdk的安装目录里面bin里面javadoc.exe指令能够解析文档注释
产生文档说明书,作者是谁 (面向对象部分讲 "简易文档说明书的制作")
@author 高圆圆
@version V1.0
*/
public static void main(String[] args){
//这是一个固定格式:输出语句 System.out.println("任何字符串内容") ;
System.out.println("这是我第一个java代码,加入注释解释说明代码!") ;
}
}
/*
java:关键字:
被Java语言赋予特定含义的单词,叫关键字!
在高级记事本notepad++以及editplus记事本以及开发工具idea/eclipes等等
针对关键字有一种颜色标记
package:包名(文件夹/目录结构):以后在开发代码中分包,分层的(真实的意义:在面向对象部分)
class:定义类的格式,Java中最基本的单元就是类 固定格式class 类名{}
还有其他权限修饰符 private,protected,具体的讲解在面向对象部分去讲
static:静态修饰符(面向对象部分的讲解,本身的含义被"共享,共用")
变量里面的数据类型都是关键字
注意事项:
goto/const这两个字 作为"保留字"去使用;
*/
class KeyWordDemo{
public static void main(String[] args){
System.out.println("被Java语言赋予特定含义的单词!");
}
}
/*
标识符:(起名字:"见名知意")
对包,类名,接口名,变量名,常量名起名字的一个字符序列!
组成规则:
1)有0-9个数字组成(不能开头)
2)字母符号(26个字母)
3)$符号
4)_下划线
对包名(目录结构package)起名字规范
单级包:(字母都是小写) com包名
xx.java
多级包:包名和包名使用.隔开
com.qf
com下面会有一个文件夹
xx.java文件
对类名和接口起名字之同样的:
定义类的时候:如果类名是单个单词,首字母大写,其余小写
(遵循阿里规范:大驼峰命名法)
举例
class Hello{}
class Demo{}
如果类名它是多个单词组成,每个单词首字母大写,其余小写
举例:
class HelloWorld{}
class MakeNameDemo{}
class StartGame{}
对变量名和方法名起名字的规范(相同):(遵循小驼峰命名法)
如果变量名是一个单词,那么 单词字母全小写
举例:定义价格
int price = 100;
如果变量名是多个单词,那么第一个单词字母小写
从第二个单词开始,每个单词首字母大写,其余小写!
举例:
定义苹果价格
int applePrice = 7;
对常量起名字(以后看到Java的源码里面常量的格式:使用的多个单词写的)
如果常量名是单个单词,字母全部大写
举例:HELLO
如果常量是多个单词,字母全部大写,单词和单词中间用"_"隔开
jdk提供的Thread类:线程
定义线程优先级三个常量:只看格式()
注意事项:
1)起名时,可以是数字,但是不能以数字开头
2)java严格区分大小写,一定要起名字见名知意
3)标识符不能是java中关键字
*/
class MakeNameDemo{
public static void main(String[] args){
//起名字,可以是数字,但是不能以数字开头
//int 1num =10;
int num =10;
//int Public = 100;//严格区分大小写,不能是特别单词,p小写成关键字,标识符不能是关键字
int public = 100;//标识符不能是java中关键字
}
}
/*
常量:
常量在程序过程中,其值不发生改变的量!
分类:
字面值常量
1)字符串常量:使用英文的符号""双引号括起来的任何内容都是字符串
举例
"helloworld"
"我爱何敏"
"今天天气不好,心情是绿色的"
2)字符常量:使用英文的''单引号括起来的单个字符内容
'a':小写字母a
不能'ab'---jvm解析的时候,认为这个字符串,不是单个内容,解析错误
如果字符参与运算的时候,此时(键盘上的每一个按键都是字符)
它就会去找ANSI码表里面的字符对应的值,进行运算;
'a'----97
'A'----65
'0'----48
3)整数常量
100,97
4)小数常量
3.14
5)空常量
一般不能直接输出null
在引用数据类型(数组说),默认null
自定义常量:跟一个关键字 final(面向对象讲,状态修饰符)
*/
class ConstantDemo{
public static void main(String[] args){
System.out.println("我爱何敏,你呢?");
System.out.println("helloworld");
System.out.println("-------------------------------");
System.out.println('a');
System.out.println('A');
System.out.println('0');
//System.out.println('asd')错误的
System.out.println('a'+1);
System.out.println('A'+1);
System.out.println('0'+1);
System.out.println("--------------------------------");
//整数常量
System.out.println("100");
System.out.println(100);
System.out.println(10);
System.out.println("--------------------------------");
//小数常量
System.out.println("100");
System.out.println(1.234);
System.out.println("--------------------------------");
//布尔常量
System.out.println(true);
System.out.println(false);
System.out.println("--------------------------------");
//空常量
String s = null;//空值
System.out.println(s);
}
}
进制就是数据进位的一种方式.
x进制:逢X进1
早期的时候,使用(电信号)电子元件的开和关来表示数据,带表0和1.
国际组织规定:在表示的数据时候,字符内容越来越多,为了要描述根据的数据,它要使用8个这样的电信号来表示一个数据,这个比特!
二进制:8个比特位(逢2进1),以"0B开头"
八进制:在二进制的基础上,从右到左每三个比特位位一组,左边不够的补0,最终计算出每个位(三个比特位一组)上的十进制数据,从左到右在进行排列,就形成了八进制!
十六进制:在二进制的基础上,从右到左,每四个比特位一组,分别计算出每组的十进制,从左到右排列,从左到右排列,最终成为十六进制
位权展开法:
X进制---十进制:
=系数*基数的权次幂相加的结果!
系数;就是当前每一个位上的数据本身
基数:就是X进制----二进制基数就是2,八进制基数就是8,十进制基数就是10,十六进制,基数就是16
基数上的权次幂:从右边开始每一个基数上进行标记,从0开始.
短除法:基数取余,直到除到商为零为止,余数反转!
在程序过程中,其值发生改变的量;
1)数据类型
2)变量名
3)初始化值
1)先定义,然后在赋初始化值
数据类型 变量名;
变量名 = 值; (在使用这个变量之前,必须赋值,否则编译报错!)
2)要么直接定义时候赋初始化值
数据类型 变量名 = 初始化值;
分为两大类
基本数据类型:
四类八种
1)整数类型: 有四种,默认int (讲课过程,没有明确类型都是int)
byte:字节类型 占1个字节 范围:-128~127(必须记住)
short:短整型 占2个字节
int(默认) 占4个字节
long:长整型 占8个字节
在定义long 的时候,规定,在初始化值加上L或者l
2)浮点类型:默认double
单精度类型float ,在定义float类型后面规定, 占4个字节
需要标记,在初始化值的后面加上F或者f
双精度类型duoble: 占8个字节
3)字符类型:
char: 里面的内容'字符' 占2个字节
4)布尔类型:开发中,逻辑判断的true还是false的结果
boolean 一般boolean不参与运算,只是表示true或者false 占1个字节
基本类型里面整数类型开发中:
用最多的int,其次long
(long类型定义时间毫秒值,后期通过常用类的功能,将系统时间得到时间毫秒值)
基本类型里面的浮点类型:使用最多的double(市场价格/商场价格...)
引用数据类型:(后面 面向对象说 讲数组里面去说)
数组,类,接口
类(具体类/抽象类)
class DataTypeDemo{
public static void main(String[] args){
//测试
//1)基本类型的整数类型
//字节类型
byte b = 120 ; //-128~127
System.out.println("b:"+b) ;//+字符串拼接符号 "b:"+b b:120 (为了输出格式好看)
System.out.println("-----------------------------------------------") ;
//短整型short
short s = 100 ;
//变量在变化
s = 110 ; //重新赋值
System.out.println("s:"+s);
System.out.println("-----------------------------------------------") ;
//int类型(整数默认)
int i = 10000;
i = 100000;
System.out.println("i:"+i) ;
System.out.println("-----------------------------------------------") ;
//如果定义int类型的变量:值非常大,此时如果不能使用int类型接收
//Java提供长整型long
//long t = 1000000000000;//DataTypeDemo.java:82:错误: 过大的整数:1000000000000
//jvm在进行解析,整数默认int,而你这个值现在完全已经超过了范围,就会报错
//定义long类型的时候,初始化的值后面加上标记L或者l
long t = 1000000000000L ;
System.out.println("t:"+t) ;
System.out.println("-----------------------------------------------") ;
//浮点类型:默认double
//单精度float:规定,浮点默认double,
//但是现在定义的时候就要定义float,只能在后面加入F或者f,标记是float类型
//float f = 12.34 ;//错误: 不兼容的类型: 从double转换到float可能会有损失
float f = 12.34F ;
System.out.println("f:"+f) ;
double d = 12.56;
System.out.println("d:"+d) ;
System.out.println("-----------------------------------------------") ;
//字符类型
char ch = 'a' ;
ch = '0' ;
System.out.println("ch:"+ch) ;
System.out.println("-----------------------------------------------") ;
//布尔类型boolean
boolean flag = true;
flag = false ; //重新赋值
System.out.println("flag:"+flag) ;
}
}
1)在Java语言中(强类型语言:语法结构非常严谨;
弱类型语言:语法结构非常不严谨,前端javascript)
同一个变量不能被定义多次
2)我们现在定义都是局部变量(在方法定义中的变量 比如main中写)
他们在使用之前,必须初始化,否则就出现错误!
3)定义变量:在某一行定义一个变量即可(格式角度去说)
在定义变量,在写一行 ,一行代码结束,遇见分号,另起行了
有的面试题,必须题,同一行定义多个变量;
class DataTypeDemo2{
public static void main(String[] args){
//定义一个变量
int a = 20 ;
//int a = 10 ;//DataTypeDemo2.java:15: 错误: 已在方法 main(String[])中定义了变量 a
a = 10 ;//重新赋值
System.out.println("a:"+a) ;
//定义一个变量x,y
int x = 15; //初始化15
int y ; //定义了,但是没有赋值
//System.out.println("y的值是:"+y) ;//使用之前,没有给y赋值 (DataTypeDemo2.java:25: 错误: 可能尚未初始化变量y)
y = 20 ;
System.out.println("y的值是:"+y) ;
/*
我们自己写建议这种格式
int m = 100 ;
int n = 10 ;
int z = 200 ;
*/
int m = 100,n =10,z;
z = 200;//给z初始化
}
}
变量的运算注意----->变量的数据类型一致,才能运算!
Java中隐式类型提升(隐式转换)(基本数据类型非常重要语法)
boolean不参与任何运算(不能转换)
byte,short,char三者之间不会相互转换,一旦参与运算,会优先提升
int(考点)---->long--->float---->double
class DataTypeDemo3{
public static void main(String[] args){
//定义两个变量
int a = 3 ;
byte b = 4 ;
//如果接收结果类型是int类型
int result = a + b ;
//=左边:目标int
//=右边: int类型的a和byte类型的b
//=右边:byte类型的b先提升为int类型的4 在和int类型的a的值相加
System.out.println("reuslt的结果是:"+result) ;
}
}
//显示转换:强转类型转换:就是将大的数据类型---转换成小的数据格式
//目标数据类型 变量名 = (目标数据类型)初始化值;
class DataTypeDemo{
public static void main(String[] args){
//定义两个变量
int a = 4 ;
byte b = 3 ;
//现在使用的接收类型是byte类型
//byte result = a + b ;//不兼容的类型: 从int转换到byte可能会有损失
//(byte,short,char三者之间不转换,一旦参与运算,优先提升int)
// =右边:int类型+byte类型的b,先要将byte类型提升int,结果int类型,
//=左边:byte类型, 无法存储int类型的结果
//目标数据类型 变量名 = (目标数据类型)(初始值在或者表达式);
byte result = (byte)(a+b) ;
System.out.println("结果是:"+result) ;
}
}
面试题1
/*
经典面试题
定义三个变量
byte b1 =3,b2 =4 ,b;
1)b = b1 + b2; //错误
b = b1 + b2; b1先提升int b2提升int 结果就是int类型的7,
但是b变量类型byte接收不了int类型结果,解决方案:使用强转类型转换
2)b = 3 + 4 ;正确 7--->在byte范围内
上面代码哪一处会编译失败?为什么,怎么改进?
考点:
1)变量和常量相加区别:
变量相加,需要考虑类型转换,(Java中隐式类型转换)
byte,short,char三者不转换,一旦参与运算,优先提升int,--->long--->float--->double
常量相加:先相加,然后看计算的结果是否在接收类型范围内,在直接用,否则,需要处理!
2)Java隐式转换和显示转换(刚才说的这些格式概念)
*/
class DataTypeTest{
public static void main(String[] args){
//定义三个变量
byte b1 =3,b2 =4,b;
//b = b1 + b2;// 从int转换到byte可能会有损失
/*
b = b1 + b2; b1先提升int b2提升int 结果就是int类型的7,
但是b变量类型byte接收不了int类型结果,解决方案:使用强转类型转换
*/
//强转
//目标类型 变量名 = (目标类型)(初始化值或者表达式);
//b = (byte)(b1+b2) ;
//System.out.println("b的值是:"+b) ;
b = 3+4 ;//先相加,然后看计算的结果是否在接收类型范围内,
//在直接用,否则,需要处理!
System.out.println(b) ;
}
}
面试题2
/*面试题2
byte b = 300 ; 编译会报错吗?为什么,如何解决?请描述解析过程
byte类型的取值范围 -128~127
*/
class DataTypeTest2{
public static void main(String[] args){
//定义变量
//byte b = 300 ;// 从int转换到byte可能会有损失
//jvm校验语法,发现300的值已经超过接收类型 范围,整数默认int
//最终结果int类型
//解决方案:强转类型转换
byte b = (byte)300;
System.out.println("b:"+b) ;//b:44
}
}
/*
解析过程:
300---已经超过了byte类型范围,使用int接收
4个字节,先计算300的数据原码
最高符号位 数值位
0 0000000 00000000 00000001 00101100
整数的原码,反码,补码都相同
(0 0000000 00000000 00000001) 00101100 ----> byte b = (byte)300;
//将4个字节的int强转为一个字节byte,使用补码 截取
补码--->最高位是0,正数,---反码,原码都相同
00101100
= 0+0+32+0+8+4+0+0
= 44
byte b = 129 ;中午自己操作一下(这周考试题就是byte取值范围的考点)
*/
++或者--
1)场景--->统计场景(统计用户的登录次数,猜数字游戏,统计用户多少次猜中了)
2)流程控制语句循环结构语句中--->++或者--
使用方式
1)不参与运算,单独使用
a)在数据的前面
b)在数据的后面
结论:
无论++或者--在数据的前面还是后面,都是对当前数据进行自增1或者自减1
2)参与运算
a)在数据的前面
结论:
++或者--在数据的前面,先进行增1或者自减1,然后参与运算!
b)在数据的后面
++或者--在数据的后面,先运算,然后进行自增1或者自减1 !
class OperatorDemo2{
public static void main(String[] args){
//定义两个变量
int a = 4 ;
int b = 3 ;
System.out.println("原数据是:") ;
System.out.println("a:"+a+",b:"+b) ;
System.out.println("--------------++或者--在数据的前面或者后面------------------") ;
//++a ;
//--b ;
a++;
b-- ;
System.out.println("a:"+a+",b:"+b) ;
System.out.println("------------------------------------------------" ) ;
//定义两个变量
int x = 3 ;
int y = 6 ;
System.out.println("x:"+x) ;
System.out.println("y:"+y) ;
//++或者--,参与运算,在数据的前面
//int m = ++x ;
//int n = --y ;
//++或者--,参与运算,在数据的后面
int m = x ++ ;
int n = y -- ;
System.out.println("x:"+x) ;
System.out.println("y:"+y) ;
System.out.println("m:"+m) ;
System.out.println("n:"+n) ;
}
}
/*面试题:
short s = 1 ;
1)s = s + 1 ;
2)s +=1;
这个1),2)两段代码,哪一个会编译失败,哪一个成功,为什么?
1)这个代码会编译报错,因为存在Java隐式类型转换
byte,shor char 三者不转换,一旦参与运算,优先提升为int,所以
s = s + 1 ;s先提升int和1相加,结果是int类型,而s类型short,无法接收int类型结果
2)s +=1 ; 会成功,
因为扩展赋值运算符+=,-=,*=,/=,%=,有一个特点:隐藏了强转类型转换
s +=1 此时等价于s = (short)(s+1) ;
*/
面试题: 逻辑双与&&和逻辑单与&有什么区别?
共同点: 无论是逻辑单与&还是逻辑双与&&都是表达并列关系, 而且都是有fasle则false!
不同点: 逻辑单与&,对多个并列条件在执行的时候,效率比较低,因为都 需要将这个符号左边的表达式和右边的表达式都需要执行一遍!
逻辑双与&& , 连接的表达式如果左边为false,则右边不执行(具有短路效果) 开发中扩展的逻辑运算符,代替基本的运算符,执行效率高!
/*
扩展的逻辑运算符
逻辑双与&& 和逻辑双或||
逻辑双与&&:
连接的表达式如果左边为false,则右边不执行(具有短路效果)
逻辑双或||:
连接的表达式如果左边为true,则右边不执行(具有短路效果)
*/
class OperatorDemo2{
public static void main(String[] args){
//定义三个变量
int a = 3 ;
int b = 4 ;
int c = 5 ;
//逻辑双与&& 满足基本特点:有false,则false
System.out.println((a>b) && (a>c)) ;//false && false = false ;
System.out.println((a>b) && (ac)) ;//true && false = false ;
System.out.println((a
/*
三元运算符(三目运算符)
格式:
(表达式)?执行true的结果:执行false的结果;
执行流程:
表达式可以简单可以复杂,如果结果是true成立,则执行成立的结果
否则不成立,则执行false的结果
需求:
定义变量,求两个变量最大值(没有提示,都是int类型)
三个数据比较最大值?
*/
class OperatorDemo{
public static void main(String[] args){
//定义两个
int a = 10 ;
int b = 5 ;
//套用格式
//(表达式)?执行true的结果:执行false的结果;
//定义变量max
int max = (a>b)?a:b ;
System.out.println("两个数据中的最大值是:"+max) ;
System.out.println("---------------------------------------") ;
//定义三个变量
int x = 20 ;
int y = 50 ;
int z = 30 ;
//方式1:使用中间变量的方式 (推荐)
//使用中间变量的方式记录一下x和y的最大值
int temp = (x>y)? x:y;
//使用中间变量的结果和z进行比较
int max2 = (temp > z)? temp : z ;
System.out.println("三个数据中的最大值是:"+max2) ;
System.out.println("---------------------------------------") ;
//方式2:不建议(使用括号标记,格式好看,否则没有括号,不好看)三元运算符的嵌套
int max3 = (x>y)?((x>z)?x:z):((y>z)?y:z) ;
//int max3 = x>y?x>z?x:z:y>z?y:z ; //不带括号,阅读性很差
System.out.println("三个数据中的最大值是:"+max3) ;
}
}
位运算符号:-----哈希里面涉及到位运算符号
基本的位运算符号:
位与&
位或|
位异或^
反码~
移位符号:
<< 左移 结论
>> 右移 结论
>>> 无符号右移
让我们书写程序的时候,更加灵活----通过键盘录入数据
Scanner类就提供了很多功能(方法)--->快速键盘录入一些int类型,来进行运算或者写具体的逻辑!
顺序结构语句
/* 流程控制语句 顺序结构语句 :比较简单,所有程序都是通过jvm调用main进行的(入口) 代码右上而下依次加载,除非在加载后面代码之前,jvm退出了! 选择结构语句 if switch 循环结构语句 for while dowhile */ class OrderDemo{ public static void main(String[] args){ //代码由上而下依次加载 System.out.println("程序开始了...") ; System.out.println("helloworld") ; System.out.println("程序结束了....") ; //jdk提供了System类有一个功能,exit(0),参数为0,正常终止jvm System.exit(0) ;//固定格式先记住:可以终止jvm System.out.println("over") ; } }
选择结构语句
if语句(三种格式if/if...else/if ...else if...else)
switch语句(考点)/* 选择结构语句之if 格式1: if(表达式){ 语句; } 场景:针对单个情况进行判断 格式2: if(表达式){ 语句1; }else{ 语句2; } 场景:针对两种情况进行判断 格式3: if(表达式1){ 语句1; }else if(表达式2){ 语句2; ... ... ... }else{ 语句n; } 场景:针对多情况进行判断 上面格式1的流程: //格式1:{}里面单条语句,可以省略,但是前期不建议 if(表达式){ 语句; } 表达式是否成立,成立,则执行语句; 否则,不执行 */ //导包 import java.util.Scanner ; class IfDemo{ public static void main(String[] args){ //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; //提示 System.out.println("请输入一个数据x的值:") ; int x = sc.nextInt() ; //格式1 if(x>=10){ System.out.println("x的值是:"+x); } System.out.println("over") ; } }
/* if格式2: if(表达式){ 语句1; }else{ 语句2; } 场景:针对两种情况进行判断 (开发中使用最多的格式) 完成"登录"/"注册" 执行流程: 表达式成立,则执行语句1; 否则,执行语句2; 注意事项: 无论if格式哪一种,不能再if后面来一个; 记住:有{大括号的地方,不能有分号,有分号地方不能有左{ 使用格式2:完成简单模拟"登录" String:Java中的类,代表字符串 (后面常用类里面说) 字符串进行比较: String类的 字符串值1.equals(字符串值2) ,是比较字符串内容是否相同 */ class IfDemo2{ public static void main(String[] args){ //定义变量 int x = 10 ; //if(x>=10); //没有意义 //{} 称为"代码块" //{ //System.out.println("x大于等于10") ; //} if(x>=10){ System.out.println("x大于等于10") ; }else{ System.out.println("x小于10") ; } } }
/* if语句格式3 格式3: if(表达式1){ 语句1; }else if(表达式2){ 语句2; ... ... ... }else{ 语句n; } 场景:针对多情况进行判断 执行流程: 首先,判断表达式1是否成立,成立,则执行语句1; 否则,不成立,继续判断表达式2是否成立,成立,执行语句2; 否则,不错成立...依次判断 .... .... 如果上面都没有匹配的结果, 执行else中的语句n; 没有提示数据类型,都是int 需求 键盘录入学生成绩(满分100分),判断该学生成绩的等级的划分 90-100 "优秀" 80-90 "较优" 70-80 "良好" 60-70 "及格" 60以下 "不及格" */ //导包 import java.util.Scanner; class IfDemo3{ public static void main(String[] args){ //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; //提示并录入数据 System.out.println("请您输入的学生的成绩: ") ; int socre = sc.nextInt() ; /* if(表达式1){ 语句1; }else if(表达式2){ 语句2; ... ... ... }else{ 语句n; } */ /* if(socre>=90 && socre<=100){ System.out.println("优秀") ; }else if(socre>=80 && socre<90){ System.out.println("较优") ; }else if(socre>=70 && socre<80){ System.out.println("良好") ; }else if(socre>=60 && socre<70){ System.out.println("及格") ; }else{ System.out.println("不及格") ; } */ //测试程序: //测试正确数据:正常范围内的数据 //测试边界数据:边界数据的是否在我们指定范围内 //测试错误数据:超了范围,不满足,应该也要包含进去 if(socre<0 || socre>100){ System.out.println("您输入的数据有误!") ; }else if(socre>=90 && socre<=100){ System.out.println("优秀") ; }else if(socre>=80 && socre<90){ System.out.println("较优") ; }else if(socre>=70 && socre<80){ System.out.println("良好") ; }else if(socre>=60 && socre<70){ System.out.println("及格") ; }else{ System.out.println("不及格") ; } } }
循环结构语句
for循环:开发中常用的
while循环:
do-while循环: java源码里面使用多一些 (工程上使用的比较少)
一个数据被另一个数据位异或两次,其值是它本身
{
public static void main(String[] args){
//方式1:中间变量
int a = 10 ;
int b = 20 ;
System.out.println("a:"+a) ;
System.out.println("b:"+b) ;
System.out.println("-------------------------------------");
//定义中间变量 (开发中,使用中间变量的方式)
/*
int temp = a ;
a = b ;
b = temp ;
*/
//方式2:位异或的特点:一个数据被另一个数据位异或两次,其值是它本身
//左边:a,b,a
//右边:a^b
a = a ^ b ; //在a变量进行 赋值为 a^b
b = a ^ b ; // a ^ b ^b ;
a = a ^ b ; //a ^ b ^a ;
System.out.println("a:"+a) ;
System.out.println("b:"+b) ;
}
}
/*
为了进行数据逻辑判断操作的时候,程序更灵活一些
Jdk提供了类供我们使用----->文本扫描器 java.util.Scanner类
在Java中,只要我们用的其他类,只要不是java.lang.xxx类都需要导包
java.lang.String
java.lang.Integer
java.lang.Math
.....
使用步骤:
1)导包 :位置是在class的上面
import java.util.Scanner ; //用谁导谁
2)创建文本扫描器 ----java中的关键字 new 创建对象(具体在面向对象中讲)
Scanenr 变量名(称为"键盘录入对象名") = new Scanner(System.in) ; 固定格式 变量名 ,自己起名字
3)友情提示 "请输入一个数据:"
4)通过文本扫描器录入数据 (整数默认int)
使用2)的变量名
int 结果变量名= 变量名.nextInt() ; //.nextInt() :调用文本扫描器的提供功能,录入int类型
5)使用这个结果变量名来进行操作
昨天的题:
键盘录入两个数据,比较是否相等
键盘录入三个数据,比较三个数据最大值
*/
//1)导包
import java.util.Scanner ;
class ScannerDemo{
public static void main(String[] args){
//2)创建文本扫描器(创建Scanner类对象) 固定写法,变量名自己起
Scanner sc = new Scanner(System.in) ;
//3)友情提示
System.out.println("请您输入一个数据(int):") ;
//4)录入int类型数据
int result = sc.nextInt() ; //.nextInt() :调用文本扫描器的提供功能 (固定写法)
//5)输出或者使用
//使用这个结果变量完成其他逻辑操作
System.out.println("录入的数据是:"+result);
}
}
经过本周的学习,我了解到了,如何使用Notepad++,cmd编译文件和运行class字节码文件,现在会编写一些简单好玩的Java程序,感觉到java的学习要细心,小小的一处不注意就有可能出现bug,而且,我觉得按时完成每天的作业可以巩固当天所学的知识,并且每天都要预习之后的课程这样,在第二天的学习中就会发现一些更深入的问题,所以要把这个习惯坚持下去!!!!!