第一章 Java编程基础
一、初识java
1、冯诺依曼结构
计算机必须具备五大部件:
- 输入数据和程序的输入设备
- 记忆程序和数据的存储器
- 完成数据加工处理的运算器
- 控制程序执行的控制器
- 输出处理结果的输出设备
2、计算机程序
计算机程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。
3、JavaSE、JavaEE
- Java SE:标准版,主要用于开发桌面应用程序。
- Java EE:企业版,提供企业级应用开发的完整解决方案。
4、Web开发
B/S架构(浏览器/服务器):Browser/Server
C/S架构(客户端/服务器):Client/Server
跨平台(一次编写,到处运行): 通过jvm虚拟机可以翻译到不同平台(windows、linux、macos)上。
5、程序运行步骤
开发三步:
- 编写:记事本编辑,保存为.java
- 编译:javac命令编译.java为.class
- 运行:java命令运行.class
//类 ---HelloWorld类名
public class HelloWorld{
//程序的入口
public static void main(String args[]){
//输出HelloWorld
System.out.println("HelloWorld...");
}
}
6、程序内容
- println输出换行,print不换行
- 转义符:\n换行 \t缩进
- 注释://单行注释 /* * */多行注释
7、编码规范
- 类名使用public修饰
- 一行只写一条语句
- {}的使用和位置
- 代码缩进
public class Pricess{
public static void main(String args[]){
System.out.println("\t\t购物清单")
System.out.println("商品名称\t购买数量")
System.out.println("1\t2")
}
}
二、变量与类型
1、变量
1.1 字节与编码
(1)字节
8bit=1B(bite) 1024B=1Kb
计算机内存的最小存储单元是字节(byte),一个字节是一个8位二进制数,即8个bit。byte的取值范围-128~127。
(2)编码
-
ASCII:美国人发明,1个字节表示英文,无法表示中文;
-
GB2312、GBK:中国制定GB2312编码,把中文编进去;
-
unicode:将所有语言统一编写,2个字节表示英文、中文;
-
UTF-8:如果代码英文较多,unicode存储空间较大,在存储和传输上就不划算。UTF-8编码把一个Unicode字符根据不同的数字,大小编码成1-6个字节,常用的英文字母被编码 成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节 。
-
转换关系:浏览网页的时候,服务器会把动态生成的Unicode ,内容转换为UTF-8再传输到浏览器。在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码 。
1.2 内存存放数据
电脑使用内存来记忆计算时所使用的的数据。
1.3 变量命名
首字母:字母、下划线_、$符号
简短且能清楚地表明变量的作用,通常第一个单词的首字母小写,其后单词的首字母大写。
2、数据类型
2.1 基本数据类型
java是强类型语言,必须有数据类型。
(1)数值类型
- 整数型:字节型byte(1),整型int(4),长整形long(8),短整型short
(2) - 浮点数:单精度型float(4),双精度型double(8)
(2)字符类型char
存储单个字符。
(3)逻辑类型boolean
true、false
2.2 引用数据类型
间接存储数据,保存的是数据的位置、地址、引用。
string:属于引用数据类型,不属于基本数据类型。
数组:java.lang.String
3、变量声明、赋值、使用
(1)先声明、后赋值
int i ;
i = 2;
(2)声明赋值合一
int i = 2;
4、运算符
4.1 赋值运算符:=
4.2 算术运算符:+ - * /
++、–、%
4.3 关系运算符
<、 >、 ==、 !=、 <=、 >=
用来做比较运算,比较的结果是boolean类型
4.4 逻辑运算符
&& :and
||:or
!:not
优先级
()最高
= 最低
算术 > 关系 > 逻辑
5、类型转换
5.1 自动类型转换(隐式类型转换)
条件:
- 两种类型要兼容:数值类型相互兼容;
- 目标类型大于源类型。
5.2 强制类型转换
(类型名)表达式
int b = (int)10.2;
6、Scanner类
获取键盘输入的信息
Scanner input = new Scanner(System.in);//创建用户能够接受用户输入信息的对象,导包ctrl+shift+o
System.out.print("请输入。。。。");//提示用户输入信息
int i = input.nextInt();//接受用户信息,nextInt中Int表示数据类型,根据实际选用
7、bug使用
设置断点;
debug方式运行程序;
切换到debug视图;
三、选择结构
1、程序设计结构:
顺序、选择、循环
2、逻辑运算符
&& :and
||:or
!:not
3、if选择
if:单分支
if else:双分支
if else if else:多分支
嵌套结构
if(条件){ //条件必须为布尔值
代码块
}
else if(){
}
else{
}
规范:把每个if或else包含的代码块都用大括号括起来;
相符合的一对if、else应该左对齐;
内层if相对外层if结构要有一定的缩进。
4、switch case
switch(表达式){
case 常量1:
代码块;
break;
case 常量2:
代码块;
break;
default:
代码块;
}
switch表达式数据类型:
int、short、byte、char、枚举、String类型
5、if和switch比较
相同:都是处理多分支的结构。
不同:switch只能处理等值条件判断;if可以处理区间。
6、产生随机数
产生随机数[0,1):
Math.random()
产生随机数1-9:
int random=(int)(Math.random()*10);
7、处理系统异常
Scanner对象的hasNextInt()方法,可以判断用户从键盘输入的字符是否是合法的数字
if (input.hasNextLnt){
}
四、循环结构
循环是指在程序中需要重复执行的一组语句;
循环由循环条件和循环操作组成。
1、while
先判断再执行,可以循环0次。
while (条件){
代码块;
}
2、do while
先执行再判断,至少循环一次。
do{
}while();
3、for
先判断,再执行,明确循环次数。
for (i=0;i<10;i++){
循环体
}
for (int=1,j=val;i<=val;i++,j--){}
for可以在表达式中声明多个同一类型的值并赋值,用“,”隔开
4、break、continue
break:改变程序流程,跳出循环,通常与if条件语句一起使用,可用在switch语句和循环语句。
continue:跳过循环体中剩余的语句而执行下一次循环。只能用在循环里。
5、equals
比较两个String类型的值是否相等:
“y”.equals(answer)
6、程序调试
- 设置断点:程序暂停执行的代码行;
- 单步运行;
- 观察变量。
7、面试题
char x = 'x'; // x对应的ASCII码为120
int i =10;
system.out.println(true ? x : i);//输出结果: 120
system.out.println(true ? 'x' : i);//输出结果: 120
system.out.println(true ? 'x' : 10);//输出结果: x
system.out.println(false ? 'x' : 10);//输出结果: 10对应的ASCII码
五、数组
1、定义
数组是一个变量,存储相同数据类型的一组数据。(多个相同数据类型按照一定的顺序排列的集合,并使用一个名字命名)
变量中保存的是数组的地址(数组元素的地址),数据本身在“堆”里保存。
i是一个变量,变量中直接保存的是数据本身的信息,变量在“栈”中保存。
栈、堆、静态区
2、基本要素
标识符(变量名)、数组元素、元素下标、元素类型
数组长度固定不变。数组申明时,需要设置数组长度,使用过程中保持不变。
分类:
- 维度:一维数组、二维数组
- 按照元素的数据类型分类:基本数据类型元素数组,引用元素类型数组
3、使用步骤
- 声明:int[] a ;
- 分配空间:a = new int[5];
- 赋值:a[0]=8;(给数组中元素赋值)
- 处理数据:
数组中的元素都有初始值:int[][][]------0,double[]------0.0,String[]---------null
4、初始化
动态初始化:分配空间和赋值分开进行。
int[] arr = new int[30]; //元素有默认值
arr[0] = 20; //赋值
静态初始化:分配空间时同时赋值。
int[] arr = new int[]{86,80,90} //
int[] arr = {86,80,90};
5、特点
- 数组本身是引用数据类型,而数组中的元素可以是任意类型 ;
- 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块空间的首地址 ;
- 数据的长度一旦确定,就不能修改 ;
- 数组通过下标(索引)的方式获取指定位置的元素。
6、应用
顺序排列:Arrays.sort(scores)
输出数组中的数: System.out.println(Arrays.toString(newNums));
获取字符串第1个字符:str.charAt(0)