一、Java入门

Java入门

  1. Java发展史

1.1 Java简史

在1990年时,sun计算机公司瞄准了下一代智能家电的程序设计,例如微波炉、面包机上,刚开始选择的语言为C++,但在使用过程中发现C++语言的API太过复杂,并且还有一些问题,例如缺少垃圾回收系统、可移植的安全性等等。刚开始,java之父高斯林是想要改进C++,但是最终还是放弃了,决心要创造出一门新语言,被他命名为Oak(橡树),这是因为他办公室门外正好有一颗橡树。经过没日没夜的努力,Oak语言终于可以作用于当时的设备上。可以通过图形界面来帮助用户操作设备。后来由于使用该软件,并不能对现有产业产生实际利益,所以整个项目停止。

时间来到了1994年,经历了3天左右的讨论,高斯林所在团队决定改变努力方向,将技术运用于万维网,由于当时的浏览器上并不像今天丰富多彩,所以sun公司所作的浏览器上的插件一经面世,便大受欢迎。在1995年时,注册Oak商标时,发现已经被使用,所以改名为Java(来自爪洼岛的一种咖啡),并正式发布。

1.2 Java版本历史

  • 1995年5月23日,Java语言诞生

  • 1996年1月,第一个JDK–JDK1.0诞生

  • 1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术

  • 1996年9月,约8.3万个网页应用了JAVA技术来制作

  • 1997年2月18日,JDK1.1发布

  • 1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录

  • 1997年9月,JavaDeveloperConnection社区成员超过十万

  • 1998年2月,JDK1.1被下载超过2,000,000

  • 1998年12月8日,JAVA2企业平台J2EE发布

  • 1999年6月,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)

  • 2000年5月8日,JDK1.3发布

  • 2000年5月29日,JDK1.4发布

  • 2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机

  • 2001年9月24日,J2EE1.3发布

  • 2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升

  • 2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0(因为新特新增加特别多,所以起了个高大上的名字!)

  • 2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME

  • 2006年12月,SUN公司发布JRE6.0

  • 2009年12月,SUN公司发布Java EE 6

  • 2010年11月,由于Oracle公司对于Java社区的不友善,因此Apache扬言将退出JCP

  • 2011年7月28日,Oracle公司发布Java SE 7

  • 2014年3月18日,Oracle公司发表Java SE 8(市场主流版本)

  • 2017年9月21日,Oracle公司发表Java SE 9

1.3 Java语言主要特点

1.  面向对象

2.  跨平台

3.  自动垃圾回收机制

1.4 java三大版本

  1. JavaSE(J2SE):Java标准版,提供了Java基本工具包,可以做

    图形界面开发等 例如Java的开发工具Eclipse等等,如果要学习java开发,
    必须先学习JavaSE,咱们第一阶段主要是对JavaSE的讲解

2.JavaEE(J2EE):Java企业版,主要针对与企业开发,也就是常说的javaWeb开发,例如,电子商务网站、ERP系统等等。这是我们学习完javaSE之后,主要学习的技术

3.JavaME(J2ME):Java微型版,主要针对电子设备的,例如手机应用等,由于现在移动端都有自己的开发语言,

例如Android、iOS.所以现在主要用在嵌入式开发

2.环境安装及编译过程

2.1环境安装

要做Java的开发或者学习,就需要安装对应的环境,就像你要玩iOS上的游戏,就需要有苹果设备、iOS操作系统,做Java开发也是同样的道理。在安装环境之前,我们需要知道几个相关名词。

1.JVM(Java Virtual Machine):Java虚拟机,Java能做到跨平台,JVM功不可没,原理大体就是,在你的设备上

安装一个虚拟的计算机,然后你的Java应用是在该虚拟机上运行。和你真实的平台无关

2.JRE(Java Runtime Environment):Java运行环境,JVM相当于虚拟计算机,JRE可以看作是该计算机上的操作系统。如果没有操作系统,那么你的电脑、手机等,就和板砖差不多了。

3.JDK(Java Development Kit):Java开发工具包,有了JVM和JRE,你的设备就可以运行Java应用,但是要开发Java应用,就需要JDK,这是为Java开发人员提供的工具包。一般JDK中就包含了JVM和JRE。

windows下Java环境安装

1.从官网下载对应的JDK,这里是JDK8的下载地址

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

jdk下载.png

x86结尾的是32位操作系统,x64结尾的是64位操作系统,记得选择了Accept之后
才可以下载。
2.下载完成之后你会看到以下图片


安装JDK1.png

双击之后,你会看到


安装jdk2.png

如果不想安装在C盘,可以点击更改,我是安装在了E盘,点击下一步即可;开发工具里面已经带有了JRE,如果此处没有将那个公共JRE设置为不安装,那么在安装过程中会有一个弹框出来让选择公共JRE的安装目录,可以和JDK安装目录放在同一级文件夹中即可。
  1. 安装完成之后,紧接着需要配置环境变量
    桌面上的此电脑或者计算机右击-->属性-->高级环境设置-->环境变量,然后你会看到如下界面
    环境变量.png

    用户变量中的设置是只能当前登录系统的用户使用;系统变量中的设置是所有用户都可以使用,一会我们将在系统变量中添加设置。
    4.配置JAVA_HOME 在系统变量下点击新建,你会看到如下界面
    JAVA_HOME.png

    变量名处填 JAVA_HOME
    点击浏览目录,找到刚才我们安装的jdk的文件夹,完成之后,你会看到如下界面
    JAVA_HOME2.png

    我这里是安装到了E盘的此目录下;这一步相当于为jdk的路径起了一个名字,叫JAVA_HOME,此处名字最好不要自己命名,因为很多使用到java的地方,默认都会
    通过JAVA_HOME来查找jdk。
    5.配置CLASSPATH
    还是点击系统变量下的新建,然后变量名处写CLASSPATH
    在变量值处填写 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
    点不可以省略,代表当前目录,将来我们要执行Java代码,你在那个目录下执行,
    JVM就会从你所在目录下查找可执行文件,如果没有点,就可能会报错说找不到可执行的文件;%JAVA_HOME% 代表刚才我们上一步配置的jdk路径
    CLASSPATH的配置的作用和import、package关键字相关,将来我们写Java代码时,很多时候需要用到java提供的一些工具(类、包等),这时候就需要用到import关键字导入这些工具,该配置就是根据import关键字,找到你需要导入的工具。
    6.配置path
    找到系统变量中的变量那一列中的Path,然后双击(或者选中path行,点击编辑),你会看到如下界面
    Path.png

    点击该界面中的新建,加入%JAVA_HOME%\bin
    再次点击新建,加入%JAVA_HOME%\jre\bin
    点击确定即可
    有的window版本,出现的是这样的界面
    path2.png

    那么你在变量值的最后加上;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
    点击确定即可
    bin目录下是存放了java执行代码所需要用到的命令
    配置 Path的作用是为了让在DOS黑框中可以使用java命令
    到此为止我们的Java环境就配置完毕,需要注意的是,每一步配置完成之后一定要点击确定,如果忘记点击确定按钮,那么刚才的配置都没有了。

接下来检查下环境是否配置正确,在电脑左下角输入cmd,点击回车,你会看到如下界面

cmd.png

输入java,点击回车, 如果出现
java不是内部或外部命令,也不是可运行的程序
或批处理文件。
,说明刚才环境配置有问题,自己对照一上步骤,仔细检查下。
再次配置完毕之后,一定要关闭刚才的黑框,重新打开,再次输入java,如果看到以下界面
cmd_java.png

接着输入 javac,如果看到以下界面
cmd_javac.png

说明环境变量配置没有问题,接下来我们就可以愉快的写代码了!
2.2 编译过程
先简单介绍下所谓的计算机语言是什么,计算机语言实际上就是我们自己按照规则写的一些文字(源代码),通过一定的手段(编译),变成计算机可以识别的语言(机器语言),让计算机可以执行。
计算机语言大体可以分为 编译性语言和解释性语言。
编译性语言:只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可以,因此其执行的效率比较高;但是比较依赖编译器,编译器又受平台影响大,所以跨平台性较差,代表性的语言有C、C++等
解释性语言:源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行;源代码—>中间代码—>机器语言。程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次;执行效率相对较低,依赖解释器,但是跨平台性好,代表性语言有Python、JavaScript等。
那么Java语言是属于编译性语言还是解释性语言呢?网上众说纷纭,各有各的道理,实际上Java属于编译-解释性语言,Java具有以上两种特点。
首先,我们需要把Java的源文件(以.java为后缀名的文本文档) 编译成字节码文件(.class为后缀名的文件),然后JVM虚拟机解释执行字节码文件。从这个过程中我们可以看出,字节码文件的生成是编译过程,字节码文件的执行是解释过程。那么,接下来,我们实际操作一下。
1.首先在桌面新建一个文本文档,然后将文件名成改为 HelloWorld,后缀名为java
就是HelloWorld.java,如果你的电脑不显示后缀名,可以将电脑设置为文件的后缀名显示。
然后在文件中写出以下代码,保存

  //双斜杠是单行注释,注释中的内容不会被编译
/*
   这是多行注释
  注释是对代码的备注,让自己或者其他程序员知道你 
  的该段代码有什么功能 ,不影响代码部分
*/
/*
这是声明了一个类,类名必须和文件名保持一致,
此处涉及到的专业名字会在后续课程中讲解,先不用深究
*/
   public class HelloWorld{
     /*这是main方法,程序的入口,意思为当我们执行代码时,
        java只会执行main方法中的代码,
       所以将来我们的逻辑代码都需要写在main方法中或者在main方法中调用
*/
       public static void main(String[] args){
              //输出语句,会将()中的内容输出到黑框
             //java代码中一般一行结束,需要以分号结尾
            //代码中涉及到的标点符号必须为英文的标点符号
             System.out.println("hello java");

    }
}

2.接下来我们代开DOS黑框,由于我们该Java源文件是在桌面上,所以我们需要先进入桌面目录在黑框中输入 cd Desktop,回车,这时,我们就进入的桌面目录


编译过程1.png

3.我们接着输入 javac HelloWorld.java,点击回车,这一步就是编译源文件


编译过程2.png

如果你和我一样,点击回车之后,两行之间没有任何内容,就说明你的代码编译没问题,如果两行中间有内容,耐心读一下内容,这些内容是告诉你,你的代码那些位置出问题了。
4.上一步没有问题的话,你会看到你的桌面多了一个HelloWorld.class文件

5.接着在黑框中输入 java HelloWorld,点击回车,这一步是解释执行字节码文件,
如果你配置CLASSPATH有问题,此处会报错说 找不到或无法加载主类。如果没问题,你会看到输出内容,就是刚才System.out.Println括号中的内容。


编译过程3.png

到此,我们的编译过程的验证操作就结束了,骚年们,刚才的过程就是编程,对,编程就是如此简单!

3.IDE简介(eclipse)
通过上面的操作我们知道,代码实际上就是按照规定语法书写的文本,如果我们写代码就使用我们自带的文本编辑器,那么开发效率会极其低下,所以市面上有很多好用的文本编辑器,例如vim、EditPlus等等,由于使用文本编辑器中的功能较少,所以发明了IDE(集成开发环境),功能更加强大,大大的提高了开发效率。Java开发常用的IDE有Eclipse、MyEclipse、idea等等,由于MyEclipse和idea都是收费的,所以Eclipse是目前比较流行的Java IDE。由于idea更加好友,所以现在很多公司也在使用idea,我们这里先介绍下eclipse的使用,后续课程中会讲解idea的使用。
1.首先从官网下载eclipse,这是官网的下载地址
https://www.eclipse.org/downloads/packages/

eclipse下载.png

由于我们后续是做javaEE开发,所以这里下载JavaEE IDE Eclipse IDE for Enterprise Java Developers,根据对应的操作系统下载Eclipse。
下载完成之后,解压文件夹,里面有一个Eclipse的图标,双击即可。如果打开
报错,很可能是版本问题,从网上查一下,你的操作系统对应的eclipse版本。
如果没有问题,你会看到如下界面
命名空间.png

Workspace 是工作空间,这是用来指定你创建的工程保存的目录。你可以自己指定写好的项目保存在哪里。
指定好之后,点击Launch,稍等片刻,就会看到如下界面
eclipse欢迎界面.png

这里是eclipse的欢迎界面,里面对当前的eclipse中的插件等信息进行了简单的展示。可以直接点击左上角的Welcome旁边的叉号关掉。然后会看到如下界面,根据eclipse版本的不同,可能显示的有差异。
eclipse的javaEE界面.png

这是eclipse的javaEE的主界面,左侧是工程目录,将来咱们会创建很多工程,都会在左侧显示,这些工程的存储位置,就是刚才的workspace中。中间是工作区,将来咱们就会在此处敲代码。其余部分会在后续使用中讲解。首先我们先讲该界面改为javaSE的界面,在右上角,点击“臭虫”左侧的图标,然后界面就会切换为JavaSE的编程界面。
接下来我们就要新建第一个java工程了。
在左侧的空白区域右击-->鼠标放在new上面,会出现一个二级菜单-->点击最底部的Other,然后你会看到如下界面

新建java工程.png

在搜索框输入java,然后在底下找到Java Project,单击Java Project,你会看到该行变蓝了,然后点击底部的 Next,你会看到如下界面


新建java工程2.png

Project Name:项目名称
Use default location:项目的保存目录,默认为我们设置的workspace目录
JRE:项目的运行环境,默认为我们安装的JDK版本
Project layout:左侧的显示布局
Working sets:工作站点,后续当项目多的时候,我们可以将项目放在不同站点下
此处我们只需命名一个项目名称,其它不需要做更改。我这里就叫做HelloWorld,然后点击Finish。我们的java工程就新建好了,你会在左侧看到下图


新建java工程3.png

JRE System Library:里面是我们运行工程所需要的jar包。
src:该文件夹中放置我们的源文件。源文件在编译过程中讲解过,就是后缀名为java的文件
接着我们要新建源文件,选中src,然后右击,鼠标放在new上面,点击二级菜单中的绿色的Class,如果没有,点击Other,搜索Class,然后点击Class
新建Class.png

点击Class之后,会看到如下界面


新建Class2.png

Source folder:该源文件所在的目录
Package:包名,就是所谓的命名空间,后续咱们会讲解
Enclosing type:创建内部类时需要用到的,后续讲解Java内部类时会讲解。
Name: 源文件名称,也是类名
Modifiers:类的修饰符
Superclass:继承的父类
Interfaces:需要实现的接口
Which method stubs would you like to create? :创建类时,你希望创建的方法
Do you want to add comments? :是否添加注释
这里面的很多内容,咱们会在后面的面向对象部分具体讲解,此处我们只需要给个Name即可。这里我的Name叫做HelloWorld,然后点击Finish。你会看到如下界面
新建java程4.png

由于我们没有给包名。这里会给一个默认包,名字为default package,在包中有我们新建的源文件,HelloWorld,在源文件中有一个同名的class。如果此处在包中和src中都有HelloWorld,那么选中整个工程,右击,点击Refresh,这是卡了。
接下来我们就要在源文件中写代码了。
双击HelloWorld.java 这就是我们的源文件,在class中添加main方法。
新建java工程5.png

当准备运行之前,记得Ctrl+S,保存一下,如果不保存,直接运行,有时候会运行你保存之前的代码。
如何运行呢?对着main方法处 右击,选择Run As,然后点击java Application即可。


运行java工程.png

运行完成之后,你会看到如下界面
运行Java工程2.png

输出内容的区域,我们称之为控制台,如果你的控制台没有在底下,你可以左键按住Console,然后任意拖动,一般我们将控制台区域放在工作区域的下面。
屏幕快照 2019-08-05 下午4.36.23.png

好了,到此为止,我们的Eclipse的简单使用就结束了,在后续的使用过程中,我们再具体说Eclipse中的强大功能。现在只需要掌握如何新建工程,如果在工程中新建源文件,如果运行工程即可。
4.进制
进制就是进位计数制,是人为定义的一种数字进位的方法,例如我们生活中最常见的就是十进制,就是逢十进一。
我们为什么要学习进制?因为我们生活中最常使用的是十进制,而计算机是二进制,所以我们需要简单的学习下进制的概念和进制转换。
首先,我们先看一下我们熟悉的十进制。
十进制的数字都是有十个数字组成,0-9.
例如 10,就是由1和0组成。每一位上的数字最大到9,当超过9时,就需要进位,因为每一位上的数字到十,就需要进位,所以就是十进制。
从上面我们可以分析出,N进制就是每位上最大的数字到N-1,逢N进位。
那么所谓的二进制,就是每位上的数字最大为1,逢2进位。
例如,二进制要表示十进制的2,就是1+1=2,逢2要进位,就是10。要表示十进制的3,就是在10的基础上再加1,就是11,....以此类推,我们可以将10进制的所有数字找到对应的二进制。
了解了进制之后,我们接下来简单学习下进制之间的转换。
首先我们需要知道位权的概念,什么是位权呢?
位权是指数制中每一固定位置对应的单位值。
还是用十进制举例子,例如个位上的位权就是1,十位上的位权就是10,百位上的位权就是100,所以十进制的111,个位上的1代表1个1,十位上的1就代表1个10,百位上的1就代表1个100.
那么十进制的187就表示为 1 X 100 + 8 X 10 + 7 X 1.
仔细观察,我们会发现,位权是有规律的,个位上的位权就是 10的0次幂,十位上的位权就是10的1次幂,百位上的位权就是10的2次幂...以此类推,
得出结论,N进制从低位到高位的位权就是 N的0,1,2,3,4....次幂
同样的道理,我们再看看二进制的数字。
例如二进制的数字 111,个位的1就代表1个2的0次幂,十位的1就代表1个2的1次幂,百位的1就代表1个2的2次幂。
那么二进制的111转换为10进制的数字就是 1 X 2的2次幂 + 1 X 2的1次幂 + 1 X 2的0次幂 = 4 + 2 + 1 = 6

所以可以得出结论:
其它进制的数字转换为十进制,就是每位上的数字 乘以位权然后相加之和。
其它进制转10进制我们清楚了,接下来我们看看十进制转其它进制。
这里有一个转换法,叫做短除倒取余。
例如十进制的10,要转换为2进制。就是
10 除以 2 商 5 余 0
5 除以 2 商 2 余 1
2 除以 2 商 1 余 0
1 除以 2 商 0 余 1
一直除到商为0为止,然后倒着排列余树,所以十进制的10转换为二进制就是1010
十进制转N进制就是 用十进制的数字除以N,记录余数,用商接着除以N...,知道商为0为止,倒着取余数即可。
到这我们的十进制转其它进制,其它进制转十进制就讲解完毕。
那M进制转N进制,可以先把M进制转为 十进制,再将十进制转换为N进制。
如果数字较大,那么就只能使用高科技了。每个电脑都提供了编程计算器。可以很方便的做进制之间的转换。这里只是说了整数之间的进制转换,课下自己查一查小数位的进制转换。
5.基本数据类型
本小节,我们先简单了解下计算机中是如何存储数据的。
我们常见的数据有 文本类型,图片、音频、视频等。由于计算机中只能识别和存储二进制的数据,所以我们需要先将要存储的数据转换为二进制,才能存储到计算机中。
在计算机中,最小的计算单元是位,就是一位数两位数的位。最小的存储单元为字节,一个字节是八位,什么意思呢?就是你要存储到数据不到1个字节大小,也会占有一个字节大小的空间。进制为1024.所以1024个字节(Byte)是1KB,1024KB是1MB,1024MB是1GB....以此类推。
那么一个字节到底有多大,如果用数字表示,就是0000 0000 到 1111 1111之间就是0到255,更直观一点,一个字节可以存储一个英文字母或者半个汉字。
了解了这些知识之后,我们接着讲解Java中的数据类型。
什么是数据类型呢?实际上就是对要存储的数据先提前表明该数据要占有的内存大小和类型。
Java中的数据类型大体分为两大类:基本数据类型和引用数据类型

引用数据类型:数组、类、接口等 咱们会在后续的课程中详细讲解引用数据类型,此处详细说一下基本数据类型。

Java中的基本数据类型分为四类八种
1.整数型:byte、short、int、long
2.浮点型:float、double
3.字符型:char
4.布尔型(逻辑型):boolean

其中整数型不言而喻,就是数学中的整数,浮点就是数学中的小数,字符就是单个字符,布尔就是真(true)或假(false),同一类下不同的类型只是代表所占的内存空间和表数范围不同,

类型 字节数 表数范围
byte 1 -2的7次幂 ~2的7次幂-1
short 2 -2的15次幂 ~ 2的15次幂-1
int 4 -2的31次幂 ~2的31次幂-1
long 8 -2的63次幂 ~ 2的63次幂-1
float 4 约 -3.4乘以10的38次幂 ~ 3.4乘以10的38次幂
double 8 约 -1.797乘以10的308次幂 ~ 1.797乘以10的308次幂
char 1
boolean 1或者4

看到上面的表格,大家可能会有以下疑问,在这咱们一一解答
1.前面我们讲解了进制的转换,所以很多同学自己计算了下,一个字节是8位,算下来应该是 0~255,为什么这里byte是一个字节,表数范围是-128~127 ??
因为这里我们说的数字都是有符号的数字,就是有正负之分,所以最高位,也就是转换为二进制之后最左边的那一位是符号位,0代表正数,1代表负数,所以真正存储数字的位数会少一位。由于计算机中负数是以补码的方式存储,所以比正数多1.
2.float和int同样都是4个字节 32位,double和long都是8个字节 64位,为什么浮点型的表数范围比整数型要大的多。这是因为浮点型的存储方式是指数的方式存储

类型 符号位 指数位 尾数位
float 最左侧第31位(1位) 第30-23位(8位) 第22-0位(23位)
double 最左侧第63位(1位) 第62-52位(占11位) 第51-0位(占52bit)

float
符号位前面提过,表示数字的正负,
指数位表示整数部分,一共有8位,所以大小为2的8次幂,由于有正负之分,所以范围为-128~128,代表的真正的数字范围为-2的128次幂~2的128次幂,大约为 -3.4乘以10的38次幂 ~ 3.4乘以10的38次幂
尾数位代表小数部分,23位二进制转换为10进制大概就是7~8位的十进制数字(参考进制转换部分小数位转换),7位还是8位和编译器有关;
double
符号位前面提过,表示数字的正负,
指数位表示整数部分,一共有11位,所以大小为2的11次幂,由于有正负之分,所以范围为-1024~1024,代表的真正的数字范围为-2的1024次幂~2的1024次幂,大约为 -1.797乘以10的308次幂 ~ 1.797乘以10的308次幂
尾数位代表小数部分,52位二进制转换为10进制大概就是15~16位的十进制数字(参考进制转换部分小数位转换),157位还是16位和编译器有关;
3.char型是用来表示字符的数据类型,所以没有给表数范围
4.boolean型是表示true或者false,所以没有表数范围,为什么是1个字节或者4个字节呢?按道理来讲,真或者假,用一位0或者1就可以表示,最小的存储单元为字节,所以肯定是一个字节嘛,但是,在Java虚拟机中没有提供对boolean类型的支持,所以编译过后,会用int来替代boolean,这样boolean会占有四个字节;如果将来我们将boolean类型数据存放进数组(后续会讲解数组),虚拟机中会将boolean数组转换为byte数组,此时,boolean类型又占有一个字节。所以说boolean类型的数据在不同场景,占有的内存空间不一样,1个或者4个字节。这里也有同学有疑问,为什么虚拟机中,不直接用byte代替boolean,而要用int呢?用byte替代明显占用内存空间小啊,这是因为我们的计算机的处理器(CPU)是32位的或者32的倍数位(是处理器不是操作系统),一次处理32位的数据效率高,所以选择用int型。
这里表数范围只要了解即可,字节数必须牢记。
到这里,我们的基本数据类型就讲解完毕,在变量讲解中会讲解如何使用
6.变量
在数据类型中,我们说了数据需要转换为二进制存储到计算机中,既然有存,肯定有对应的读取,例如,你将一张照片存入计算机,当你要将照片发给好友,当然需要先将照片读取出来,才能发给对方。那我们如何找到我们存储的的数据呢?实际上,计算机位我们的每个存储区域都进行了编号,整个编号就是我们常说的内存地址。由于我们的最小存储单元为字节,就拿内存来说,都是多少G的,所以用二进制表示内存地址的话,会很长,所以一般我们用16进制或者8进制的数字表示内存地址。进制越大,表示数字时所用到的位数就越少。
16进制的数字为 0-F(A-F对应10-15) 例如10进制的15 用16进制表示就是F,一般为了做区分,16进制的数字以0X或者0x开头。例如十进制的20表示为16进制就是0X14。
八进制的数字是以0开头,例如014,在java中代表8进制的14,就是10进制的12.

所以我们要读取某个数据,就是找到它对应的内存地址,从此地址中读取出我们的数据,以便使用。但是,这些16进制的数字没有具体意义,不好记忆。所以就用变量来代表内存地址。就像我们的唯一身份标示是我们的身份证,但是不好记忆,所以用名字来代表。

变量如何定义和使用呢?
定义一个变量形式为:数据类型 变量名 [=初始值];中括号中代表可写可不写。
例如我要定义一个int型的变量,就可以写成
int a;或者int a = 10;
给定了数据类型,就是说,不管你这个变量值将来是多少,所占的内存空间都是该数据类型的大小。初始值是说,在定义期间,就直接指明该变量所代表的数据是多少,当然,变量变量,后续我们可以更改该变量的值。
使用时,如果上面已经定义了该变量,那么就可以直接为该变量赋值,或者参与其它运算。
例如上面已经定义了 int a;
那么使用时就是 a = 100,不需要再写数据类型;=在计算机语言中是赋值的意思,在后续运算符章节我们会详细讲解运算符。这里就是将100赋值为变量a。在底下的场景中a就代表100.
定义的形式和简单使用我们知道了,接下来我们说一说需要注意的地方。
1.如果定义时,没有赋初始值,后续也没有给变量赋值,那么参与其它运算就会报错。因为计算机也不知道你这个变量要代表的什么数据。


变量1.png

2.给变量赋值时,该值不能超出定义时的数据类型的表数范围。
例如 byte a = 1000;就会在编译期间报错,因为超出了byte的表数范围。


变量2.png

3.float f = 10.5;会报错,因为Java中,默认小数为double类型,double类型的表数范围比float大,所以报错。正确写法为float f = 10.5f; 数字后面的f表明该小数位float类型。如果是double类型可以写成 double d = 10.5;或者double d = 10.5d;都可以。


变量3.png

4.字符类型的定义为 char c = 'a'; 给字符类型的变量赋值只能是一个字符,不管是中文还是字母,只能是一个,不能是空字符,或者多个字符,例如 char c = '';或者char c = 'aa';都不对。


变量4.png

变量5.png

变量6.png

5.布尔类型的值只能是true或者false,不能是其它内容,例如,boolean b = true; boolean b_1 = false;如果给其它值会报错。


变量7.png

6.在同一个花空号中{ },如果已经定义一个变量a,那么在底下不能再定义一个变量名叫a。


变量8.png

7.变量名的命名规范
1.最好做到见名知意
2.做到驼峰命名,首字母小写,变量名为多个单词时,除了第一个单词,其余单词首字母大写,例如 int myAge = 10;
3.变量名的首字母必须是 字母、下划线或者$不能是其它从第二个字符开始可以是数字、字母、下划线或者$。
前两条是约定俗成的规则,就是说你不遵守,代码也不会报错,第三条是必须遵守的规则。


变量9.png

接下来,我们简单讲解下数据类型转换的知识点
1.强制转换(显式转换)
int a = 10;
byte b = a;
我这里将一个int的变量要赋值给一个byte的变量,但是int的表数范围比byte要大,所以肯定会报错。此处不是看数据,而是看数据类型。
那么要怎么做呢?
byte b = (byte) a;
我们将a的数据类型强制转换为byte,然后赋值给byte变量即可。
形式为: 表数范围小的数据类型 变量名 = (表数范围小的数据类型) 表数范围大的变量或者数据;

注意点:这种类型转换称之为强制转换或者显式转换,是有一定风险的;例如上面的a变量的值为1000,你强制转换为byte之后,byte的放不下的,所以结果也就不会是1000.一定要注意这种结果会有变化的风险。

作用场景:将表数范围大的变量或者数据赋值给表数范围小的变量,需要强制转换

2.隐式转换
int a = 10;
float b = a;
此处当我们将a,赋值给b之后,a所代表的数据的类型也就转换为了float类型。
不用我们做额外的操作。
形式:表数范围大的类型 变量名 = 表数范围小的变量或者数据。
作用场景:将表数范围小的变量或者数据赋值给表数范围大的变量

3.char类型和int型的转换
讲解这个之前,我们需要先了解下ASCII码表,计算机中,每一个字符,不管是中文或者字母,都有一个对应的十进制数字。下图就是部分的ASCII码表


部分ASCII码表.png

我们看到每一个字符都有对应的十进制数字,例如 大写A对应65,所以char可以和int进行转换

例如,
1.我们可以将char类型的变量或者数据直接赋值给int型变量
char c = 'A';
int a = c;
int b = '我';
2.也可以将一个数字变为对应字符
char c = (char)100;
int a = 100;
char ch = (char)a;
此处需要强制转换即可。

你可能感兴趣的:(一、Java入门)