目录
一.计算机基础知识
1.计算机
2.计算机用途
3.计算机硬件
4.计算机软件
5.软件结构的划分
6.常用的dos操作命令
二.Java介绍
1.Java发展历史
2.Java平台版本
3.Java语言的特点
4.JDK,JRE与JVM
5.Path环境变量的配置
6.Path环境变量的执行流程
7.HelloWorld
8.注释
9.关键字
10.标识符
11.常量
三.Java之变量
1.变量的概念:
2.数据类型有哪些
3.隐式转换和显示转换
四.Java之运算符
1.算术运算符
2.赋值运算符
3.赋值运算符经典题目
4.关系运算符
5.逻辑运算符
6.三元(三目)运算符
7.位运算符
五.Java之流程控制
1.顺序结构语句
2.if语句
3.If语句简单实现
六.心得体会
计算机是一个能够高速处理海量数据智能电子设备.
由两部分组成: 软件和硬件
科学计算,利用计算机完成数据的运算
数据存储,完成一些文件的读和写,或者对一些数组内容排序...
计算机辅助设计:CAD工程制图
人工智能:利用计算机模拟人工思维!
媒体应用:动画,视频...
计算机网络:网络也很重要,一个台计算机没有网络,类似于电话没有电话线一个道理!
概念:由电子,机械和光电元件组成的物理装置的总称!
组成:由CPU、主板、内存、电源、主机箱、硬盘、显卡、键盘、鼠标,显示器等等!
两种:
系统软件:
dos系统,windows系统,Linux系统,MAC系统,移动端:Android系统,ios系统
应用软件:
计算机上的安装的客户端软件,QQ,办公软件wps,wegame软件,....
C/S结构:Client-Server客户端和服务器端交互
特点:
客户端软件必须升级才能使用服务器端的高版本功能
B/S结构(架构):Browser-Server 浏览器端和服务器端交互
特点:
只要保证计算机上有浏览器,无论高版本还低版本都能够访问服务器
rd: 删除目录
del: 删除文件,写法: del 文件名.后缀名 或者 del *.后缀名(表示删除所有后缀相同的文件)
cd: 进入指定目录
cd..: 返回至上一级目录
cd\: 返回至此磁盘的根目录
盘名:: 切换磁盘
dir: 查看此目录下的所有文件夹
cls: 清空dos窗口
md: 创建目录
copy con 文件名.后缀名: 新建一个文件,以ctrl+z结束
rd /s: 询问并删除指定文件夹
rd /s /q: 不询问直接删除指定文件夹
Java是1995年诞生的,Java之父是詹姆斯,高斯林
JavaSE(Standard Edition): 针对桌面应用程序的解决方案
JavaME( Micro Edition) :针对嵌入式设备提供的一套解决方案
JavaEE( Enterprise Edition) :针对企业级开发解决方案(以后就是搞这个的!)
Java语言是易学的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员 很容易学习和使用Java。
Java语言是强制面向对象的。Java语言提供类、接口和继承等原语,为了简单起见, 只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制 (关键字为implements)。
Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编 程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类 库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程 方法激活)机制也是开发分布式应用的重要手段。Java语言是健壮的。Java的强类型机制、异常处理、垃圾的自动收集等是Java程序 健壮性的重要保证。对指针的丢弃是Java的明智选择。
Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机 制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的 名字空间以防替代本地的同名类、字节代码检查。
Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被 编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个 Java平台的任何系统中运行。
Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统的解释器中运行。
Java是性能略高的。与那些解释型的高级脚本语言相比,Java的性能还是较优的
Java语言是原生支持多线程的。在Java语言中,线程是一种特殊的对象,它必须 由Thread类或其子(孙)类来创建。
JDK(Java Development Kit):
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了 JRE。所以安装了JDK,就不用在单独安装JRE了。
JRE(Java Runtime Environment):
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等, 如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JVM(Java Virtual Machine):
Java虚拟机
方式一:
1)将jdk的bin目录的路径复制 win10/win11--->此电脑--->右键----属性----->高级系统上设置---->环境变量 ---->系统变量,不要在用户变量找path,在系统变量找path (用户变量,一个计算机可以有多个用户)
path不要删除别的东西,别的东西都是系统配置,谨慎不要随意删除!
将1)里面jdk的bin目录的路径复制过来放在path里面,
配置完成之后,打开dos窗口,在任何路径下都可以使用javac和java(c盘系统盘,有的文件夹没有权限) 输入javac java java -version 都是有提示信息,说明可以用了
方式二:(推荐)
配置方式1的弊端:
当我们jdk版本升级了,需要手动更改系统变量的里面path,可能改动过程中不小心将别的环境变量误删了,为了避免 这个问题我们不能改动path了,使用方式2配置! (主要原因)
配置方式步骤 :
1)赋值jdk安装目录的路径,不是bin目录 D:\develop_software\Java\jdk1.8.0_162
2)此电脑---->右键---->选择属性---->高级系统设置---->环境变量---->系统变量 系统变量----->新建一个变量名: JAVA_HOME 变量值:就是1)的路径
3)在path里面 引入JAVA_HOME对应的变量值的路径 3 .Path环境变量的执行流程 无论使用第一种方式是还是第二种方式,在配置之前,如果你已经打开了dos窗口, 那么配置完成之后,要生效的话,必须将当前dos窗口关闭,重新进入dos窗口 (windows+r--->输入cmd,在进去) 4 .classpath(找你的字节码文件):临时环境变量(了解,不作为重 点) path环境变量里面的最前面 %JAVA_HOME%\bin ,如果win10/win11 点击path,隔段形式,后面不用分号 如果是在一行上bin后面带上分号;
好处:以后jdk版本升级,需要改动path? 不需要,只需要改动JAVA_HOME变量值里面的路径
1)首先肯定需要在指定目录中找对应的.java文件, 举例:如果.java文件是在D盘根目录下,肯定需要现在这个D盘里面 javac xx.java--->进行编译和运行 如果当前指定目录有这个java文件,直接编译和运行!
2)如果在当前这个指定目录找不到,它就会去系统变量path环境变量里面找 : jdk安装目录的bin里面去找,如果这里面也没有,最终,提示----"找不到文件!"
在java文件所在目录下,进入cmd
使用javac 文件名.java进行编译,随后会产生类名.class(字节码文件)
使用java 类名运行
class HelloWorld{
public static void main(String[] args){
System.out.println("helloworld, 你好世界") ;
}
}
//单行注释
/* */多行注释
/** */文档注释
提高了代码的阅读性;调试程序的重要方法。
注释是一个程序员必须要具有的良好编程习惯。
将自己的思想通过注释先整理出来,再用代码去体现
Java的关键字:
被Java语言赋予特定含义的单词,叫关键字!例如:
class, interface,enum, byte, short, int, long, float, double, char, boolean, void等等
标识符:(起名字,"见名知意")
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
组成规则:
1)由0-9的数字组成
2)字母字符(26个字母)
3)$符号
4)_下划线包名:
全部小写,可用层级结构,例如: com.company.java代表有com文件夹下有company文件夹下有java文件夹.例如:com.baidu.java
类名和接口名:
要用大驼峰,即每个单词的首字母大写,例如:DemoTest
变量名和方法名:
要用小驼峰,即第一个单词小写后面的单词首字母大写,例如,nameString
常量名:
全部大写,单词和单词之间用_隔开,例如MIN_NUMBER
注意事项:
起名字,可以数字,但是不能以数字开头
Java严格区分大小写,一定要起名字见名知意
答:常量在程序执行过程中,其值不发生改变的量
分别有字符串常量: 使用英文的符号"" 双引号括起来的任何内容都是字符串字符常量: 使用英文的'' 单引号阔括起来的单个字符内容
如果字符不参与运算,就是字符本身!
如果字符参与运算的时候,此时 字符(键盘上的每一个按键都是字符) 它就会去找ANSI码表里面的字符对应的值,进行运算;
整数常量:
小数常量:
布尔常量: true/false
空常量: 一般不能直接输出null,引用数据类型默认是null
什么是变量?
在程序过程中,其值发生改变的量即是变量
学习Java编程语言,在Java中,如何定义变量?
变量的三要素
1)数据类型
2)变量名
3)初始化值
定义变量的方式:
1)先定义,然后在赋初始化值
数据类型 变量名;
变量名 = 值; (在使用这个变量之前,必须赋值,否则编译报错!)
2)要么直接定义时候赋初始化值
数据类型 变量名 = 初始化值
分为两大类:
基本数据类型和引用数据类型
2.1 基本数据类型
四类八种
1)整数类型
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个字节
2.3 引用数据类型:
数组,类,接口 类(具体类/抽象类)
什么是隐式类型转换?
无法直接观察到的类型转换,就是隐式类型转换
对于计算机来说,只有加法运算,其余的运算都是通过加法来实现的,并且计算过程都是在CUP上进行的,而CUP运算器一般都是4字节的长度,也就是int类型的长度,就只能处理4字节的加法运算,所以在处理数据时通常会发生整型提升。
变量的运算注意--->变量的数据类型一致,才能运算
Java中隐式类型提升(隐式转换)(基本数据类型非常重要的语法)
boolean不参与任何运算(不能转换)
byte,short,char三者之间不会相互转化,一旦参与运算,会优先提升int--->long--->float--->double(默认类型提升,也称为隐式类型转换)例:
byte b1 = 3;
int n;
int = b1 + 10;//因为10默认是int类型的,所及b1在参与运算是会自动提升为int类型
什么是显示类型转换?
显示转换:强转类型转换:就是将大的数据类型---转换成小的数据格式
目标数据类型 变量名 = (目标数据类型)初始化值;
例:
short s = 32;
byte b;
b = (byte) s + 10;
1)变量和常量相加区别:
变量相加,需要考虑类型转换,(Java中隐式类型转换) byte,short,char三者不转换,一旦参与运算,优先提升int,--->long--->oat--->double
常量相加:先相加,然后看计算的结果是否在接收类型范围内,在直接用,否则,需要处理!
基本算数运算符:
+, -, *, /, %(模,求余)
注意事项:
/:默认取整的
//计算机对小数计算(伪计算)
//除或减,结果可能是无限近似于某个值,不太精确!
//后面常用类,Java提供类BigDecimal:对小数可以进行精确计算扩展的算数运算符
++或者--
1)场景--->统计场景(统计用户的登录次数,猜数字游戏,统计用户多少次猜中了)
2)流程控制语句循环结构语句中--->++或者--
使用方式
1)不参与运算,单独使用
a)在数据的前面
b)在数据的后面
结论:无论++或者--在数据的前面或者后面,都是对当前数据自增1或者自减1
2)参与运算
a)在数据的前面
b)在数据的后面
结论:++或者--在数据的前面,先进行自增1或者自减1,然后参与运算!
++或者--在数据的后面,先运算,然后进行自增1或者自减1!
基本的赋值运算符
=
举例:
int a = 10;
将1-这个数据赋值给int类型的变量a
将等号右边的值赋值给等号左边的变量
这个"="不能写成"==",后者是比较,最终的结果无非true或者false
扩展的赋值运算符
+=, -=, *=, /=, %=
举例:
int b = 100;
b += 200;//如果明确了具体的数据类型(整数默认int) b = b + 200;
将这个扩展的赋值运算符的左边的变量和右边的数据值相加,在赋值给左边的变量
面试题:
short s = 1;
1)s = s + 1;
2)s += 1;
这个1), 2)两段代码,哪一个会编译失败,哪一个成功,为什么?
1)这个代码会编译报错,因为存在Java隐式类型转换
byte,short,char三者之间不转换,一旦参与运算,优先提升为int,所以
s = s + 1;s先提升int和1相加,结果是int类型,而s类型short,无法接收int类型结果
2)s += 1;会成功,
因为扩展的赋值运算符+=, -=, *=, /=, %=,有一个特点:隐藏了强制类型转换
s += 1此时等价于s = (short) (s + 1);
比较(关系)运算符
<, >, <=, >=, ==, !=
注意事项:
1)这些符号无论连接的表达式是简单的还是复杂的,
最终结果要么是true要么是false
2)==是比较,不能写成"=",否则编译报错
==是在基本数据类型用的,比较的是两个数据值是否相等
逻辑运算符,开发中,常用于逻辑判断!
基本的逻辑运算符:
逻辑单与&:(并列关系)
有false,则false;多个并列条件必须同时满足才能成立,否则,不成立
逻辑单或|:或的关系
有true,则true,多个条件,有一个满足即可成立!
逻辑异或^:
相同则为false,不同则为true;
简单记:男女关系
男男
女女
男女
女男
逻辑非!:
非true,则false,非false,则true扩展的逻辑运算符
逻辑双与&& 和逻辑双或||
逻辑双与&&:
连接的表达式如果左边为false,则右边不执行(具有短路效果)
逻辑双或||:
连接的表达式如果左边为true,则右边不执行(具有短路效果)
面试题:
逻辑双与&&和逻辑单与&有什么区别?
共同点:
无论是逻辑单与&还是逻辑双与&&都是表达并列关系,
而且都是有fasle则false!
不同点:
逻辑单与&,对多个并列条件在执行的时候,效率比较低,因为都
需要将这个符号左边的表达式和右边的表达式都需要执行一遍!
逻辑双与&& ,
连接的表达式如果左边为false,则右边不执行(具有短路效果)
开发中扩展的逻辑运算符,代替基本的运算符,执行效率高!
三元运算符(三目运算符)
格式:
(表达式) ? 执行true的结果 : 执行false的结果;
执行流程:
表达式可以简单可以复杂,如果结果是true成立,则执行成立的结果
否则不成立,则执行false的结果
需求:
定义变量,求两个变量的最大值(没有提示,都是int类型)
位运算符号:-----哈希里面涉及到位运算符号
基本的位运算符号:
位与&
位或|
位异或^位异或的特点:
一个数据被另一个数据位异或两次,其值是它本身
反码~
移位符号:
<< 左移 结论
>> 右移 结论
>>> 无符号右移位运算符里面的移位符号的特点
<<:左移
将这个数据补码---进行左移,
多余的位数(最高位)丢弃掉,在右边补0
结论: 使用<<符号左边的数据乘以2的移动次幂
>>:右移
将数据补码进行右移,最高位是1,左边补1,如果最高位是0,左边补0,多余的位数丢弃掉
结论:将>>左边的数据除以2的移动次幂
>>>:无符号右移
将数据的补码进行右移,将多余的丢弃掉,无论最高符号位是1还是0,左边永远是补0
8.键盘录入数据
让我们书写程序的时候,更加灵活----通过键盘录入数据
Scanner类就提供了很多功能(方法)--->快速键盘录入一些int类型,来进行运算或者写具体的逻辑!
导包
为了进行数据逻辑判断操作的时候,程序更灵活一些
Jdk提供了类供我们使用----->文本扫描器 java.util.Scanner类
在Java中,只要我们用的其他类,只要不是java.lang.xxx类都需要导包
java.lang.String
java.lang.Integer
java.lang.Math
.....import java.util.Scanner;
实例化Scanner对象
Scanner scanner = new Scanner(System.in);
键盘录入对应类型
int n = scanner.nextInt();
流程控制语句
顺序结构语句 :比较简单,所有程序都是通过jvm调用main进行的(入口)
代码右上而下依次加载,除非在加载后面代码之前,jvm退出了!
选择结构语句
if
switch
循环结构语句
for
while
dowhile
选择结构语句之if
格式1:
if(表达式){
语句;
}
场景:针对单个情况进行判断
格式2:
if(表达式){
语句1;
}else{
语句2;
}
场景:针对两种情况进行判断
格式3:
if(表达式1){
语句1;
}else if(表达式2){
语句2;
...
...
...
}else{
语句n;
}
场景:针对多情况进行判断
上面格式1的流程://格式1:{}里面单条语句,可以省略,但是前期不建议
if(表达式){
语句;
}
表达式是否成立,成立,则执行语句;
否则,不执行if格式2:
if(表达式){
语句1;
}else{
语句2;
}
场景:针对两种情况进行判断 (开发中使用最多的格式)
完成"登录"/"注册"
执行流程:
表达式成立,则执行语句1;
否则,执行语句2;
注意事项:
无论if格式哪一种,不能再if后面来一个;
记住:有{大括号的地方,不能有分号,有分号地方不能有左{
使用格式2:完成简单模拟"登录"
String:Java中的类,代表字符串 (后面常用类里面说)
字符串进行比较: String类的 字符串值1.equals(字符串值2) ,是比较字符串内容是否相同
需求:
使用格式2:完成简单模拟"登录"
提示:
String:Java中的类,代表字符串 (后面常用类里面说)
字符串进行比较: String类的 字符串值1.equals(字符串值2) ,
是比较字符串内容是否相同已知:
String username = "admin" ; 用户名
String password = "123456" ; 密码
键盘录入用户名和密码和已知的用户名和密码都已知,才能提示"登录成功",
否则"用户名或者密码错误"
import java.util.Scanner;
class IfTest {
public static void main(String[] args) {
//已知
//用户名
String username = "admin";
String password = "123456";
//创建键盘录入对象
Scanner scanner = new Scanner(System.in);
//提示并录入数据
System.out.println("请输入用户名:");//用户名录入的字符串
// 键盘录入对象名.nextLine() 固定写法
String inputUsername = scanner.nextLine();
System.out.println("请输入密码:");//用户名录入的字符串
// 键盘录入对象名.nextLine() 固定写法
String inputPwd = scanner.nextLine();
//if格式2 使用它完成逻辑判断
/*
字符串进行比较: String类的 字符串值1.equals(字符串值2) ,
是比较字符串内容是否相同
*/
//录入的用户名和已知的存在的用户名对比,如果一致,并且录入的密码和已知的密码一致,登录成功
if (inputUsername.equals(username) && inputPwd.equals(password)) {
System.out.println("登录成功");
} else {
System.out.println("用户名或者密码错误");
}
}
}
目前为止,学的东西大部分还比较简单,对我比较难的是位运算符,需要好好自己推导几个题才可以熟悉,if...else语句并不难,很容易就可以理解,今后学的东西还有很多,要养成预习复习的好习惯.