Loading

Java基础知识

一、Java基础0

1. JDK,JRE,JVM分别是什么?

JDK:Java Development Kit的缩写;

JRE:Java Runtime Environment的缩写,意为Java运行时环境,它包含虚拟机但不包含编译器;

JVM:Java Virtual Machine(Java虚拟机)的缩写。Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。

JDK和JRE的区别:

JRE是Java Runtime Environment的缩写,意为java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的,还有所有的Java类库的class文件,都在jre的lib目录下,并且都打包成了jar。

JDK是Java Development Kit的缩写,意思是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时包含了编译java源码的编译器javac,以及java程序调试和分析的工具软件:jconsole,jvisualvm等,还包含了java程序编写所需的文档和demo程序。

如果只想要运行java程序,则安装JRE就可以了。如果需要编写java程序,就需要安装JDK。

2. Java语言是跨平台的吗?JVM是跨平台的吗?

Java语言与操作系统无关,是跨平台运行的;JVM不能跨平台,不同平台需要安装对应的版本才能运行,但是JVM确保了Java的跨平台性,是它将java的字节码文件翻译成与系统平台对应的机器码。

3. 环境变量path和classpath的区别?

path用来指定可执行文件的路径,如果要执行的可执行文件不在当前目录下,系统就会搜索path中设置的路径;

classpath是指定你在程序中所使用的的类文件的路径,就是告诉编译器去哪找这个类。

 

4. 一个”.java“源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以。必须只有一个类名与文件名相同。

 

二、Java基础1

1. 数据类型

(1) Java是一种强类型语言,针对每种数据都提供了对应的数据类型。

(2) 分类:

  A:基本数据类型:4类8种

  B:引用数据类型:类,接口,数组。

(3) 基本数据类型

A:整数 占用字节数
byte 1
short 2
int 4
long 8
B:浮点数  
float 4
double 8
C:字符  
char 2
D:布尔  
boolean 1

注意:

整数默认是int类型,浮点数默认是double。
长整数要加L或者l,如果在int范围内,则可以不加L或l但还是建议加L。
单精度的浮点数要加F或者f。

2. 数据类型转换

  (1)boolean类型不参与转换

  (2)默认转换
    A: 从小到大
    B: byte,short,char --> int --> long --> float --> double
    C: byte,short,char之间不相互转换,直接转成int类型参与运算。

  (3)强制转换
    A:从大到小
    B:可能会有精度的损失,一般不建议这样使用。
    C:格式:
      目标数据类型 变量名 = (目标数据类型) (被转换的数据);
  (4)思考题:
      A:下面两种方式有区别吗?
        float f1 = 12.345f;
        float f2 = (float)12.345;
        有区别,float f1=12.345f定义一个float类型的变量,float f2 = (float)12.345是把double类型的12.345强制转换为float类型的变量。

      B:下面的程序有问题吗,如果有,在哪里呢?
        byte b1 = 3;
        byte b2 = 4;
        byte b3 = b1 + b2;
        byte b4 = 3 + 4;
        其中byte b3 = b1 + b2;是有问题的因为两个byte类型的变量相加首先会把byte提升为int再做加法运算再把结果int类型的结果赋值给byte类型的变量b3会有问题;
        而byte b4 = 3 + 4;没问题是因为3+4是一个常量计算,然后把结果赋值给byte类型的b4,如果结果在byte的范围之类就不会报错,显然byte的范围是-127-128所以不会有问题。

      C:下面的操作结果是什么呢?
        byte b = (byte)130;
        结果是-126,已知补码求原码

      D:字符参与运算
        是查找ASCII里面的值
          'a' -> 97,'z' -> 122  'A' -> 65,'Z' -> 90  '0' -> 48,'9' -> 57

3. 思考题

(1) char型变量中能不能存贮一个中文汉字?为什么?
  java采用unicode编码,2个字节(16位)来表示一个字符,无论是汉字还是数字,字母,或其他语言都可以存储。2.char在java中是2个字节,所以可以存储中文。

三、Java基础2

1. 运算符

(1) 算术运算符
(2) 赋值运算符
  A:=,+=,-=,*=,/=,%=等

  B:=叫做赋值运算符,也是最基本的赋值运算符
    int x = 10; 把10赋值给int类型的变量x。
  C:扩展的赋值运算符的特点
    隐含了自动强制转换。
  思考题:
    short s = 1;
    s = s + 1;(s+1运算结果是int型,需要强制转换类型)

    short s = 1;
    s += 1;(可以正确编译,+=内置运算符运算时可自动变换数据类型)
(3) 比较运算符
  A:== 和 equals 的区别是什么?
    “==”比较的是两个引用在内存中的地址是否相同,也就是说在内存中的地址是否一样。
    equals方法是由Object类提供的,可以由子类来进行重写。默认的实现只有当对象和自身进行比较时才会返回true, 这个时候和 “==”是等价的。
    String类重写了equals方法,比较的是内存空间存放的数据是否相同。
  B:两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
    答案肯定是不一定。同时反过来equals为true,hashCode也不一定相同。
    类的hashCode方法和equals方法都可以重写,返回的值完全在于自己定义。
    hashCode()返回该对象的哈希码值;equals()返回两个对象是否相等。

(4) 逻辑运算符
  A:&,|,^,!,&&,||
  B:逻辑运算符用于连接boolean类型的式子
  C:结论
    &:有false则false
    |:有true则true
    ^:相同则false,不同则true。
    情侣关系。男男,男女,女男,女女。
    !:非true则false,非false则true

    &&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。
    ||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
(5) 位运算符
  A:^的特殊用法
    一个数据针对另一个数据位异或两次,该数不变
  B:思考题
    a:请实现两个变量的交换
      **方式1采用第三方变量
      **方式2用位异或运算符
        左边a,b,a
        右边a^b
      **方式3用变量相加的做法
        左边a,b,a
        右边a+b,a-b,a-b
      **方式4一句话搞定
        b = (a+b) - (a=b);
    b:请用最有效率的方式计算出2乘以8的结果
      2<<3
(6) 三元运算符
  A:格式
    比较表达式?表达式1:表达式2;
  B:执行流程:
    首先计算比较表达式的值,看是true还是false。
    如果是true,表达式1就是结果。
    如果是false,表达式2就是结果。
  C:案例:
    a:比较两个数据是否相等
    b:获取两个数据中的最大值
    c:获取三个数据中的最大值

四、Java基础3

1. switch语句

(1) 格式:
  switch(表达式) {
    case 值1:
      语句体1;
      break;
    case 值2:
      语句体2;
      break;
    ...
    default:
      语句体n+1;
      break;
  }
格式解释说明:
  switch:说明这是switch语句。
  表达式:可以是byte,short,int,char。JDK5以后可以是枚举。JDK7以后可以是字符串。
  case:后面的值就是要和表达式进行比较的值。
  break:表示程序到这里中断,跳出switch语句。
  default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else。
(2) 思考题
  switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
    可以,不可以,JDK7以后可以
(3) 执行流程:
  A:首先计算表达式的值
  B:和每一个case进行匹配,如果有就执行对应的语句体,看到break就结束。
  C:如果没有匹配,就执行default的语句体n+1。
(4) 注意事项:
  A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
  B:default可以省略吗?
    可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
    特殊情况:case就可以把值固定。
  C:break可以省略吗?
    可以省略,但是结果可能不是我们想要的。会出现一个现象:case穿透。最终我们建议不要省略。
  D:default一定要在最后吗?
    不是,可以在任意位置。但是建议在最后。
  E:switch语句的结束条件
    a:遇到break就结束了  b:执行到末尾就结束了
(5) if语句和switch语句各自的场景
  A:if
    针对boolean类型的判断;针对一个范围的判断;针对几个常量的判断
  B:switch
    针对几个常量的判断

2. 循环语句

(1) 有三种:for,while,do...while
(2) do...while循环
  A:基本格式
    do {
      循环体语句;
    }while(判断条件语句);
  扩展格式:
    初始化语句;
    do {
      循环体语句;
      控制条件语句;
    }while(判断条件语句);
  通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。
  B:三种循环的区别
    a:do...while循环至少执行一次循环体
    b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
(3) 循环使用的注意事项(死循环)
    A:一定要注意修改控制条件,否则容易出现死循环。
    B:最简单的死循环格式
      a:while(true){...}
      b:for(;;){}

3. 控制跳转语句

(1) break:中断的意思
  A:用在循环和switch语句中,离开此应用场景无意义。
  B:作用
    a:跳出单层循环(当前循环)
    b:跳出多层循环,需要标签语句的配合
(2) continue:继续
  A:用在循环中,离开此应用场景无意义。
  B:作用
    a:跳出单层循环的一次,可以继续下一次
(3) return:返回
  A:用于结束方法。
  B:一旦遇到return,程序就不会在继续往后执行(返回值为void时只用写return后面不用跟其他的,程序就返回了)。

 

posted @ 2019-08-14 17:26  brynchen  阅读(284)  评论(0)    收藏  举报