曹阳的博客 仅用于学习和分享

Java基础

2019-10-16

Java入门篇-编程基础–2天

D1:计算机的体系结构、Java语言的概述、开发环境的搭建和使用、HelloWorld.java、跨平台原理等

D2:变量和注释、8种数据类型、常见的进制及转换、单个字节范围、数据类型的转换等

D3:运算符的符号和功能、分支结构等

D4:for循环结构、break和continue关键字、双重for循环、while等

D5:一维数组的两种声明方式以及增删改查操作、二维数组的两种声明方式等

计算机的体系结构(常识)

一.基本概念

  1. 计算机俗称”电脑”,是一种被广泛应用于各个领域的设备

  2. 计算机主要由:硬件+软件

  3. 计算机硬件:客观存在的各种计算机相关设备

  4. 计算机软件:用于控制各种硬件设备完成各种功能

二.计算机的体系结构

  1. 硬件:CPU,内存,硬盘,显卡,键盘,显示器,鼠标…

    CPU:中央处理器,是计算机中最核心的部件,相当于人的大脑

     主要用于处理各种计算机的指令以及软件中的数据等	
     inter:i3 i5 i7 i9	
     手机:高通 骁龙 麒麟980(华为)
    

    内存:是计算机中的存储部件

     主要用于临时存放CPU访问的数据内容,CPU直接访问且效率高
     缺点:容量小,一旦断电会造成数据的丢失
     时刻记得Ctrl+s进行保存
    

    硬盘:是计算机中的存储部件

     CPU不能直接访问硬盘中的数据,因此效率比较低
     容量大,若断电不会造成数据的丢失
    

    字节:

     1Tb = 1021GB
     1Gb = 1024Mb
     1Mb = 1024Kb
     1KB = 1024byte(字节)  通常一个英文字母占1个字节,一个汉字占2个字节
     1byte = 8bit(二进制位)  在计算机的底层识别0和1组成的二进制序列
    

    其中键盘叫做标准输入设备,显示器叫做标准输出设备

  2. 软件:系统软件 和 应用软件

    系统软件:

     主要指操作系统
     Windows/Unix/Linux/iOS/Android
    

    应用软件:

     主要指安装在操作系统之上的软件
     QQ/迅雷/浏览器/office
    
  3. 计算机的体系结构

    使用者=>应用软件=>系统软件=>硬件设备

    其中系统软件分为:内核(Kernel) 和 外壳(Shell)

Java语言的概述(常识)

一.Java语言的背景

  1. 20世纪90年代 单片机系统柜 商机 家电设备智能化 sun公司开展绿色计划 詹姆斯-高斯林 1983年c++语言不能跨平台 橡树oak语言 程序员喝咖啡爪哇岛

  2. 诞生于1995年,该语言之父是詹姆斯-高斯林,之前隶属于sun公司,现在隶属于Oracle公司

二.Java语言的主要版本

  1. Java SE:Java平台标准版,主要学习Java语言的语法规范和常见类

  2. Java EE:Java平台企业版,主要学习Java项目的后台开发技术,编写B/S架构项目

  3. Java ME:Java平台微型版,随着Android平台的迅速普及已经走向淘汰

开发环境的搭建和使用(重点)

一.jdk的下载和安装

  1. 下载方式

    方式一:通过官网下载 <www.sun.com/www.oracle.com>

    方法二:搜索下载 jdk1.8

  2. 安装方式

    若下载的是绿色版,则直接解压即可

    若下载的是安装版(.exe的),则直接一路点击下一步即可

    切记jdk的安装路径中不要有中文

二.安装目录简介

  1. bin 二进制 各种.exe(可执行文件)

  2. db 微型数据库

  3. include 头文件

  4. jre Java运行时环境

  5. lib 各种库

  6. src 源代码(读里面的string.java文件,Java官方写好的)

三.相关的概念(记住)

  1. jdk Java开发工具包,只要做Java开发就需要下载和安装该软件

  2. jre Java运行时环境信息,无论是开发Java应用还是仅仅运行一个已经开发好的Java应用都必须安装jre(给客户装jre)

  3. jvm Java虚拟机,是Java程序与计算机操作系统之间的桥梁

  4. javac.exe Java语言的编译器,主要用于将Java源代码进行编译生成字节码文件

  5. java.exe Java语言的解释器,主要用于启动Java虚拟机对字节码文件进行解释执行

四.Java程序的编写流程

  1. 新建文本文档,将文件名由xxx.txt修改为xxx.java

  2. 使用记事本的方式打开文件,编写Java代码后进行保存

  3. 启动dos窗口,切换到xxx.java文件所在的路径中

    进入文件夹,按住shift右键打开命令行窗口

    进入文件夹,在地址栏输入cmd回车

  4. 使用javac xxx.java进行编译,生成xxx.class的字节码文件

  5. 使用java xxx进行解释执行,打印最终结果

五.常用快捷键

  1. Windows+d 打开桌面

  2. Windows+e 打开计算机

  3. Windows+l 锁屏

  4. Windows+r 打开运行

  5. Windows+tab 切换任务

  6. alt+tab 切换任务

六.配置环境变量

Path:将javac.exe所在的路径信息复制到Path变量值的最前面,加上英文版的分号,一路确定即可

七.跨平台原理(记住)

由于不同的操作系统中都提供了Java虚拟机进行翻译,因此同一份字节码文件可以在不同的操作系统中执行,从而赢得了”一次编译,到处运行”的美名

八.Java常见的开发工具

  1. 编辑器: 记事本,Notepad++,EditPlus,UltraEdit

  2. 集成开发环境: JBuilder,NetBeans,Eclipse/MyEclipse,Idea

九.打印HelloWorld代码

public class HelloWorld/*类名(必须和文件名一致)*/ {/*类体*/

    public static void main/*主方法,是程序入口*/(String[] args) {/*方法体*/

        System.out.println("HelloWorld!");
        }
}

变量和注释(重点)

一.基本概念

  1. 当需要在Java程序中记录单个数据内容时声明一个变量即可,声明变量的本质就是在内存空间中申请一块存储单元,由于该存储单元的数值可以改变,因此得名”变量”

  2. 由于存放数据内容的大小不同导致所需存储单元的容量不同,在Java语言中使用数据类型加以描述,为了便于下次访问还需要指定变量的名称

二.变量的声明方式

  1. 数据类型 变量名 = 初始值;

    如: int ia = 10;

  2. 注意事项

    变量在使用之前必须声明,否则报错”找不到符号”

    变量在使用之前必须初始化,否则报错”尚未初始化变量”

    变量不能重复声明,否则报错”已在方法main(String[])中定义了变量”

三.标识符(变量名)的命名规则

  1. 要求由数字、字母、下划线及美元$组成,其中数字不能开头 基本上都用字母,偶尔用数字,下划线常用于定义常量,从来不用$ 数字不能开头的根本原因:容易和long类型直接量混淆出错

  2. 不能死Java中的关键字,所谓关键字就是Java语言中用来表示特殊含义的单词

  3. 严格区分大小写,长度没有限制但不宜过长

    如:name和Name代表不同的标识符,不推荐使用

  4. 尽量做到见名知意,支持中文但不推荐使用

四.注释

  1. // 表示单行注释,从//开始一直到本行末尾的所有内容都是注释

  2. /**/ 表示多行注释,从/开始一直到/之间的所有内容都是注释

  3. /***/ 表示多行注释,支持提取内容

  4. 注意:Java中多行注释的嵌套是不可以的(笔试题)

五.API的使用

  1. jdk中带有大量的API类,是有Java系统带来的工具库,这些工具是数以万计的Java官方程序员的技术积累

  2. 位置: 这些类存储在jre/lib/src等文件中

  3. 优点: 这些类可以大大简化编程,提高开发效率

  4. 用法: 使用API类要用import语句导入类

数据类型

一.数据类型基本分类

  1. 基本数据类型(记住)

    byte,short,int,long,float,double,boolean,char

  2. 引用数据类型(了解)

    数组,类,接口,注解,枚举

二.常用的进制

  1. 进制转换
    负十进制转换为二进制将十进制转换成二进制按位取反再加1
    负二进制转换为十进制先减1再按位取反然后合并为十进制整数后添加负号
    
  2. 原码、反码、补码
    原码原码就是带符号位的二进制二进制数
    反码正数的反码是其本身负数的反码是符号位不变其余位取反
    补码正数的补码是其本身负数的补码是符号位不变按位取反再加1
    

三.单个字节表示的整数范围(重中之重)

  1. 在计算机中单个字节表示8位二进制位,其中最高位代表符号位,剩下的7位代表数值位,具体表示范围如下:

    非负数的表示范围:0000 0000 ~ 0111 1111 => 0 ~ 127 => 2^7-1
    负数的表示范围:1000 0000 ~ 1111 1111 => -128 ~ -1 => -2^7 ~ -2^0
    综上,对单个字节的二进制位来说,所能表示的十进制范围是:-128 ~ 127 => -2^7 ~ 2^7-1
    

四.整数类型

  1. 在Java语言中用于描述整数数据的类型有:byte,short,int,long,推荐int类型

  2. byte类型在内存空间中占1个字节,表示的范围是:-2^7 ~ 2^7-1 => -128 ~ 127

  3. short类型在内存空间中占2个字节,表示的范围是:-2^15 ~ 2^15-1 => -32768 ~ 32767

  4. int类型在内存空间中占4个字节,表示的范围是:-2^31 ~ 2^31-1 => 正负二十一亿之间

  5. long类型在内存空间中占8个字节,表示的范围是:-2^63 ~ 2^63-1 => 比int类型还大的数

  6. 在Java程序中直接写出的整数数值叫直接量/字面值/常量,该数据默认为int类型,若希望表达更大的直接量则需要在直接量的后面加上l或者L表示long类型的直接量

  7. 若希望表示比long类型范围还大的数,则需要借助java.math.BigInteger类型加以描述

五.浮点类型

  1. 在Java中用于描述小数类型的类型有:float和double,推荐使用double类型

  2. float类型在内存空间中占4个字节,叫做单精度浮点数,通常有效到小数点后7位

  3. double类型在内存空间中占8个字节,叫做双精度浮点数,通常有效到15位(更精确)

  4. 在Java程序中直接写出的小数数值叫直接量/字面值/常量,该数据默认为double类型,若希望表达float类型的直接量则需要在直接量的后面加上f或者F表示float类型的直接量

  5. 由于浮点类型的数据的计算有误差,若希望实现精确运算则需要借助java.math.BigDecimal类型加以描述

六.布尔类型

  1. 在Java中用于描述布尔类型的类型有:boolean,数值只有:true和false(注意:没有0和1)

  2. boolean类型在内存空间中所占的大小没有明确的规定,很多资料认为是1个字节

七.字符类型

  1. 在Java中用于描述单个字符类型的类型有:char,如:’a’,’1’,’中’等

  2. char类型在内存空间中占2个字节,表示16位无符号整数,范围是:0 ~ 65535

  3. 由于char类型描述的数据内容有限,因此在以后的开发中更多的使用String类型来描述字符串信息

  4. 在计算机的底层只识别0和1组成的二进制序列,像’a’这样的图案无法存储到计算机中,为了能存储和获取就需要给该图案指定一个编号,该编号就叫做ASCII

    a - 97 A - 65 0 - 48 空格 - 32 换行 - 10

  5. 0011 0000 按整数解析就是48,按字符解析就是’0’

  6. 转义字符

    \ \n \t \\ \b \r \ \"

八.基本数据类型之间的转换

  1. 自动类型转换

    主要指从小类型到大类型之间的转换

    byte -> short/char -> int -> long -> float -> double

  2. 强制类型转换

    主要指从大类型到小类型之间的转换

    语法格式:目标类型 变量名 = (目标类型)源类型的变量名

    强转有风险,以后开发中尽量少使用!

运算符

一.算数运算符

  1. + - * / %

  2. 注意

    (1)在Java语言中,两个整数相除时,结果只保留整数部分丢弃小数部分

    (2)若希望保留小数部分,则处理方式如下:

     a.将其中任意一个整数强转为double类型
     b.让其中任意一个操作数乘以1.0进行运算即可
    

    (3)0不能做除数,否则编译OK,运行发生ArithmeticException算数异常;0.0可以做除数但结果是无穷

    (4)+既可以做算数运算符也可以作为字符串连接符 ,区分方式如下:

     只要+两端的操作数中有一个是字符串类型,则按照字符串连接符对待,且连接结果是字符串类型
    

二.关系/比较运算符

  1. > >= < <= == !=是否不等于

  2. 所有与以关系元素符作为最终运算的表达式结果都是boolean类型,只有true和false

三.自增减运算符

  1. ++ --自减运算符,主要用于使得变量自身的数值减1,只需要一个操作符

  2. 注意

    (1)对于变量自身来说,++ia和ia++都实现变量自身数值的加1效果,是等价的

    (2)++ia和ia++的区别

     ++ia表示先让ia自身的数值加1,然后再作为整个表达式的结果
     ia++表示先让ia的数值作为整个表达式的结果,然后再让ia自身的数值加1
    

四.逻辑运算符

  1. &&逻辑与,同真为真,一假为假 ||逻辑或,一真为真,同假为假 !逻辑非,真为假,假为真

  2. 逻辑运算符两端的操作数都是boolean类型的,结果也是boolean

  3. 逻辑运算符的短路特性

    对于逻辑与来说,若第一个条件为假则整个表达式一定为假,第二个条件不用判断

    对于逻辑或来说,若第一个条件为真则整个表达式一定为真,第二个条件不用判断

五.条件/三目运算符

  1. 语法:条件表达式?表达式1:表达式2

  2. 判断条件表达式是否成立,若成立执行表达式1,若不成立执行表达式2

六.赋值运算符

  1. 简单赋值

    =表示赋值运算符,主要用于将=右边的数据赋值给=左边的变量,覆盖原来的数值

  2. 笔试题

    ia == 2; 判断ia的数值是否等于2

    2 == ia; 判断2是否等于ia的数值,结果与上述方式等价,但推荐该方式,少写一个=会报错,减少犯错可能性

    ia = 2; 将数据2赋值给变量ia,覆盖原来的数值

    2 = ia; 编译报错

  3. 复合赋值

    += *=

七.常用运算符的优先级

  1. ()的优先级极高

  2. =的优先级极低

  3. 若实在不确定运算符的优先级,则可以借助()加以确定

分支结构(重中之重)

一.基本概念

  1. 在某些特殊场合中需要进行判断并作出选择时,就需要使用分支结构

二.if分支结构

  1. 语法格式

    if(条件表达式) {
     语句块;
    }
    
  2. 执行流程

    判断条件表达式是否成立
     => 若成立,则执行语句块
     => 若不成立,则跳过语句块
    

三.if-else分支结构

  1. 语法格式

    if(条件表达式) {
     语句块1;
    }else{
     语句块2;			
    }
    
  2. 执行流程

    判断条件表达式是否成立
     => 若成立,则执行语句块1
     => 若不成立,则执行语句块2
    

四.if-else if-else分支结构

  1. 语法格式

    if(条件表达式1) {
     语句块1;
    }
    else if(条件表达式2){
     语句块2;			
    }
    ...
    else {
     语句块n;
     }
    
  2. 执行流程

    判断条件表达式1是否成立
     => 若成立,则执行语句块1
     => 若不成立,则判断条件表达式2是否成立
         => 若成立,则执行语句块2;
         => 若不成立,则执行语句块n
    

循环结构(重中之重、难点)

一.基本概念

  1. 在某些特殊场合中需要重复执行一段代码时,借助循环结构加以处理

二.for循环(推荐)

  1. 语法结构

    for(初始化表达式;条件表达式;修改初始值表达式) {
     循环体;
    }
    
  2. 执行流程

    执行初始化表达式 => 判断条件表达式是否成立
     => 若成立,则执行循环体 => 修改初始值表达式 => 判断条件表达式是否成立
     => 若不成立,则循环结束
    

三.break和continue关键字

  1. break关键字用于循环中表示跳出当前循环(熟练)

  2. continue关键字用于循环中表示结束本次循环继续下一次循环(会用就行)

  3. break和continue关键字对分支结构没有意义

四.特殊的循环

  1. for(;;) 这种没有循环条件的循环叫做无限循环,俗称”死循环”,用Ctrl+C退出

  2. 通常与break关键字搭配使用

五.双重循环(重点、难点)

  1. 语法格式

    for(初始化表达式1;条件表达式2;修改初始值表达式3) {
     for(初始化表达式4;条件表达式5;修改初始值表达式6) {
         循环体;
     }
    }
    
  2. 执行流程

    执行初始化表达式1 => 判断条件表达式2是否成立
     => 若成立,则执行初始化表达式4 => 判断条件表达式5是否成立
         => 若成立,则执行循环体 => 执行修改初始值表达式6 => 判断条件表达式5是否成立
         => 若不成立,则内层循环结束,也就是外层循环的循环体结束 => 修改初始值表达式3 => 判断条件表达式2是否成立
     => 若不成立,则外层循环结束
    
  3. 注意事项

    (1)外层循环变量动一下,则内层循环变量跑一圈
    (2)当需要打印多行多列的数据内容时,可以使用双重for循环
    (3)如果break关键字要跳出外层循环,要在外层循环的for前面加'outer:'
    

六.while循环(重点)

  1. 语法格式

    while(条件表达式) {
     循环体;
    }
    
  2. 执行流程

    判断条件表达式是否成立
     => 若成立,则执行循环体 => 判断条件表达式是否成立
     => 若不成立,则循环结束
    

七.while循环和for循环比较

  1. while循环和for循环都是”当型循环”(当条件满足才执行循环体),完全可以互换

  2. while(true)等价于for(;;),都表示无限循环

  3. while循环主要用于明确循环条件但不明确循环次数的场合中

  4. for循环主要用于明确循环次数或范围的场合中

八.循环分支实例

  1. 猜数字小游戏,生出随机数

    // 表示生成0~99之间的整数存放到变量num中
    import java.util.Random;
    Pandom ra = new Random();
    int num = ra.nextInt(100);
    

一维数组

一.基本概念

  1. 数组:是相同数据类型的多个元素的容器,元素按线性顺序排列

    当需要在程序中记录单个数据内容时,则声明一个变量即可;当需要在程序中记录多个类型相同的数据内容时,则声明一维数组即可

    所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素(“一个跟一个”)

  2. 一维数组的本质就是在内存中申请一段连续的存储单元

  3. 数组名称:便于下次访问该存储空间的数据

  4. 数组元素:主要指存放到数组中的数据内容

  5. 数组长度:主要指数组的容量或最多可以存放的元素个数,用数组名.length可以获取数组长度

  6. 数据下标:主要指数组元素的编号,从0开始可以取到长度-1

  7. 数组操作:对下标的控制,可以通过下标方式访问数组中每一个元素

二.声明方式

  1. 声明数组语法格式(动态方式)

    // 数据类型[] 数组名称 = new 数据类型[数组的长度];
    // 如:
     int[] arr = new int[5]; // 表示声明一个长度为5元素类型为int类型的一维数组(推荐)
     int num = 5; // 表示声明一个初始值为5的变量
     int arr[] = new int[5]; // 不推荐使用,不方便和变量声明区分
     // 基本类型的数组(数据元素为基本类型)创建后,其元素的初始值:byte、short、char、int、long为0;float和double为0.0;boolean为false
    
  2. 元素的初始化(静态方式)

    // 数据类型[] 数组名称 = {元素值1,元素值2,...}; 
    // 如:
     int[] arr = {10,20,30,40,50};
     // 大括号初始化只能用于声明时的初始化,若用于赋值则有编译错误
    
  3. 复杂的方式(静态方式,不常用)

    int[] arr = new int[]{1,2,3,4,5};
    
  4. 数组的增删改查

二维数组(会用即可)

一.基本概念

  1. 二维数组本质上就由多个一维数组组成(摞在一起)的数组,也就是说二维数组中的每个元素都是一个一维数组,而一维数组中才是数据内容

  2. brr.length表示二维数组的长度,也就是二维数组中元素的个数,也就是一维数组的个数,也就是行数

  3. brr[0].length表示二维数组中第一个元素的长度,也就是第一行的长度,也就是第一行的列数

  4. brr[0][0]表示二维数组中第一行第一列的数据内容

二.声明方式

  1. 声明语法格式

    // 数据类型[][] 数组名称 = new 数据类型[行数][列数];
    // 如:
     int[][] brr = new int[2][3]; // 声明一个具有2行3列元素类型为int类型的二维数组
     // 其中行下标的范围是:0~1;列下标的范围是:0~2
    
  2. 元素的初始化

    // 数据类型[][] 数组名称 = { {初始值1,初始值2,...},...};
    // 如:
     int[][] brr = { {1,2,3},{4,5,6} };
    
  3. 二维数组的特殊用法

    int[][] brr = new int[3][]; // 声明一个3行暂时还不知道多少列的数组
    brr[0] = new int[3];
    brr[1] = new int[4];
    brr[3] = new int[5];
    // 二维数组的底层结构也是一段连续的内存空间,所以每行的列数可以不一样
    

Content