Java基础-运行环境与关键字和基本数据类型

Java 基础-运行环境与关键字和基本数据类型

接上一篇的语言简介, 我们知道任何编程语言制作的软件,运行都需要一定的运行环境。 那么Java语言的运行环境是什么?

Java语言的编译与运行环境

  1. Java 编译工具
    jar.exe jar包
    javadoc.exe 文档生成器
    Java.exe 解释器
    Javac.exe 编辑器
    这里说的是Windows平台下的 exe 其实其他平台一样,原理都一样。 我们继续,

  2. 开发与运行Java程序需经过哪些过程?
    用工具编辑源程序,也就是写代码,保存
    用Java编辑器工具javac.exe编译源程序文件,生成字节码.class文件
    用Java解释器工具Java.exe解释运行生成.class文件

  3. 跨平台是怎样实现的呢?
    上一篇简单说了一下, Java语言运行在JVM (Java Virtual Machine,简称 JVM) 中,
    JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。
    而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一”中间层“,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。
    JVM是一个”桥梁“,是一个”中间件“,是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。

注意:编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。

所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如 .exe),仍然需要JVM的支持。

注意:跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。

Java 语法关键字

直接看起来,什么是关键字? 感觉很抽象复杂难懂。 这样吧 , 我简单比个例子你就明白了,编程语法和我们日常所学的英语、日语都一样。
英语里边: too … to / as soon as 。 把这些关键短语 加入语句里边,马上语句结构简单明了。
Java语法的关键字和这个意思一样。

  1. Java 常见关键字
    用于定义数据类型的关键字
    class interface    byte short int long float double char boolean void               
    用于定义数据类型值的关键字
    true false null       
    用于定义流程控制的关键字
    if    else switch    case default while do for break    continue return           
    用于定义访问权限修饰符的关键字
    private    protected public       
    用于定义类,函数,变量修饰符的关键字
    abstract final static synchronized   
    用于定义类与类之间关系的关键字
    extends    implements           
    用于定义建立实例及引用实例,判断实例的关键字
    new    this super instanceof   
    用于异常处理的关键字
    try    catch finally throw    throws
    用于包的关键字
    package    import           
    其他修饰符关键字
    native strictfp transient volatile assert
  1. 关键字解释
    break           用在 switch 或者循环语句中,表示中断结束的意思,跳出循环直接可以结束该语句
    continue        用在循环语句中,表示中断结束的意思,不过跟 break 有区别,它是退出本次循环后继续执行下一次循环           
    return          常用功能是结束一个方法(退出一个方法),跳转到上层调用的方法
    interface       接口的意思,用来定义接口。
    static          静态修饰符,被修饰后成员被该类所有的对象所共有。也可以通过类名调用
    private         权限修饰符,可以修饰成员变量和成员方法,被修饰的成员只能在本类中被访问        隐藏具体实现细节,提供对外公共访问方法,提高安全性
    this            当成员变量和局部变量名称一样时,需要用 this 修饰,谁调用这个方法,那么该方法的内部的this就代表谁,如果不适用 this ,那么局部变量隐藏了成员变量
    super           代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
    final           由于继承中有一个方法重写的现象,而有时候我们不想让子类去重写父类的方法.这对这种情况java就给我们提供了一个关键字: final
                    可以修饰类,变量,成员方法。被修饰类不能被继承;被修饰的方法不能被重写;被修饰的变量不能被重新赋值,因为这个量其实是一个常量。
                    修饰基本数据类型    指的是值不能被改变;修饰引用数据类型    指的是地址值不能被改变
    finally         被finally控制的语句体一定会执行;特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
                    finally的作用:    用于释放资源,在IO流操作和数据库操作中会见到
    abstract        抽象的意思,用来修饰抽象类与抽象方法
                    abstract 不能和哪些关键字共存?
                        private    冲突        被private修饰的方法不能被子类继承,就不能被重写,而我们的抽象方法还需要被子类重写
                        final      冲突        被final修饰的方法,不能被子类重写 , ,而我们的抽象方法还需要被子类重写
                        static     无意义    因为被static修饰的方法可以通过类名直接访问,但是我们的抽象方法没有方法体,所以这样访问没有意思
    extends         继承的意思,通过它可以类与类之间产生继承关系。
    implements      实现的意思,通过它可以让类与接口之间产生实现关系。
    instanceof      测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据

Java 常用关键字解释

this和super

  • 面向对象之this关键字
    • 为什么要有this
      • 当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题
    • this关键字特点
      • 是当前类的对象引用
      • 简单的记,它就代表当前类的一个对象。谁调用这个方法,那么该方法的内部的this就代表谁
    • this的应用场景
      • 解决局部变量隐藏成员变量
  • this和super的区别
    • A:通过问题引出super
      • 子类局部范围访问父类成员变量
    • B:说说this和super的区别
      • this 代表的是本类对象的引用
      • super 代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
    • C:this和super的使用
      • a:调用成员变量
        • this.成员变量 调用本类的成员变量
        • super.成员变量 调用父类的成员变量
      • b:调用构造方法
        • this(…) 调用本类的构造方法
        • super(…) 调用父类的构造方法
      • c:调用成员方法
        • this.成员方法 调用本类的成员方法
        • super.成员方法 调用父类的成员方法

instanceof

  • 这玩意儿是什么呢?
    • instanceof是Java的一个二元操作符,和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。
  • 使用过程中注意事项有哪些?
    • 类的实例包含本身的实例,以及所有直接或间接子类的实例
    • instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误
     //比如下面就会编译错误
     String s = null;
     s instanceof null     
     s instanceof Integer  
    

Java的注释方式

// 单行注释
多用于对属性,变量以及算法重要转折时的提示

/* 多行
注释 /
多用于对类、方法及算法的详细说明,一般在对类的注释中要有以下内容:
1.类的简要说明
2.创建者及修改者
3.创建日期或者最后修改日期
/
* JAVA文档
注释 */
使用开发时间久了,也不会有那么多的规范, 总之一句话 : 代码是给机器看的, 注释是给人看的。

Java语法的基础知识

在进入正式的编程之前, 我们需要了解一些Java的基础知识。包含常见的基本数据类型 , 命名规则, 访问修饰符、运算符等

Java的常见基础数据类型

这里放一张图吧, 注意 , 这里只是简单的说明了基本的数据类型,所占的位数与默认值。 这里和C/C++ 不同的是默认值就是0, 而不是在内存中随机的一个数值。
在这里插入图片描述
照顾一下0基础的同学,下边就简单解释一下这些基本数据类型

  • 逻辑型–boolean

逻辑值有两种状态,即人们经常使用的 “true”和“false”。这样的值是用boolean类型来表示的。boolean有两个文字值,即true和false。
以下是一个有关boolean类型变量的声明和初始化:

boolean truth = true; //声明变量值为真

注意:在整数类型和boolean类型之间无转换计算。有些语言(特别值得强调的是C和C++)允许将数字值转换成逻辑值,
这在Java编程语言中是不允许的;boolean类型只允许使用boolean值。

字符型–char
使用char类型可表示单个字符。一个char代表一个16-bit无符号的(不分正负的)Unicode字符。一个char文字必须包含在单引号内(‘’)。

‘a’
‘\t’       一个制表符
‘\u????’   一个特殊的Unicode字符。应严格按照四个16进制数字进行替换。例如: ’\u03A6’表示希腊字母“Φ”
char类型变量的声明和初始化如下所示:
char ch = `A'; // 声明并初始化一个char型变量
char ch1,ch2 ; // 声明两个char型变量
char是int兼容的类型,比如可以如下声明:
int a = ‘a’; // a = 97
char c = 65; // c = ‘A’

  • 文本类–String

String不是原始类型,而是一个类(class),它被用来表示字符序列。字符本身符合Unicode标准。与C和C++不同,String不能用 \0作为结束。
String的文字应用双引号封闭,如下所示:

“The .quick brown fox jumped over the lazy dog.”

String类型变量的声明和初始化如下所示:

// 声明两个String型变量并初始化他们
String greeting = "Good Morning !! \n" ;
String err_msg = "Record Not Found !" ;
String str1,str2 ; // 声明两个字符串变量

  • 整数型–byte, short, int, long

在Java编程语言中有四种整数类型,它们分别使用关键字byte, short,

int和long中的任意一个进行声明。整数类型的文字可使用十进制、八进制和16进制表示,如下所示:

十进制值是2
首位的0表示这是一个八进制的数值
0xBAAC  首位的0x表示这是一个16进制的数值

注意──所有Java编程语言中的整数类型都是带符号的数字。

整数类文字被默认为int类型。

整数类文字后面紧跟着一个字母“L”,可以强制它为long型。

例如:

2L        十进制值是2,是一个long
077L      首位的0表示这是一个八进制的数值
0xBAACL  前缀0x表示这是一个16进制的数值

四种整数类型的长度和范围前面已经列出,这些长度和范围是按Java编程语言规范定义的,是不依赖于平台。

  • 浮点数–float和double

如果一个数字文字包括小数点或指数部分,则该数字文字为double型浮点数。
例如:

3.14
3.02E23  

如果一个数字文字后带有字母F或f,则该数字文字为float型浮点数。
例如:

2.718F        

如果一个数字文字后带有字母D或d,则该数字文字为double型浮点数。
例如:

123.4E-306D  

浮点变量可用关键字float或double来声明。

Java技术规范的浮点数的格式不是我定的, 是由电力电子工程师学会(IEEE)754定义的,是独立于平台的,所以记住背会考试要考的。

进制

这东西虽然说不算是Java语法里的范围,但是这东西用的地方多, 比如颜色值、内存地址大部分是 16进制, 计算机里最基本的数据格式是二进制 , 日常给人看的大部分是十进制 , 等等 。

  • 二进制

0和1 前缀0B或者0b 比如:0B1001 转为十进制是9

  • 八进制

0-7 前缀0 比如:0103

  • 十进制【我们常用的】

0-9 没有前缀

  • 十六进制

0-9 和 A-F 前缀0x或者0X 比如:0x123

  • 进制转化

任何进制转化为十进制公式:系数 * 底数 ^ 指数

举个栗子:

0b1010 = 1 * 2^3 + 0 *2^2 + 1*2^1 + 0*2^0
       = 8 + 0 + 2 + 0
       = 10

0123  = 1*8^2 + 2*8^1 + 3*8^0
      = 64 + 16 + 3
      = 83

0x123 = 1*16^2 + 2*16^1 + 3*16^0
      = 256 + 32 + 3
      = 291

编码方式

常见的字符编码

  • ASCII码
  • GBK码
  • Unicode码【占2个字节】

运算符

  • 运算符有哪些?
  • 算术运算符
  • , - , * , / , %【取余】 , ++【自加】, --【自减】
  • 赋值运算符
    = , += , -= , *= , /= , %=
  • 关系运算符
    == , > , < , >= , <= , !=
  • 逻辑运算符
    & ,^ ,| ,&& ,|| ,! , ^
  • 三目运算符
    格式:(条件表达式)?表达式1:表达式2
  • 位运算符
    & , | , ^ , ~ , << , >> , >>>

这个放个运算符优先级图
在这里插入图片描述
说一个比较笨但是比较有效的方法,如果不确定优先级, 就按照自己想的运算顺序加括号。

总结

这篇文章主要写了Java的基础知识、关键字、基本数据类型、运算符等 。 我们下篇见。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章