zoukankan      html  css  js  c++  java
  • 20189217 2018-2019-2 《移动平台开发实践》第1周学习总结

    第一章 Java 基础

    第一章比较简单,主要讲的是下载安装java,写HelloWorld程序以及介绍编码惯例和集成开发环境。
    在这一章的学习实践中,我主要遇到了2个问题:jdk11和jdk8的区别,jdk与jre的关系。

    问题一:jdk11与jdk8的区别

    由于之前安装过jdk8,所以这次在配置环境变量的时候也习惯性的在配置文件里加了一行
    <code_s>export JRE_HOME=${JAVA_HOME}/jre</code_s>
    但是后来检查解压后的jdk目录时发现与jdk8不同的是,jdk11的目录下并没有jre。

    查了一下,jdk11中,Oracle不再提供JRE和Server JRE下载,其实 jdk 本身也包含了 jre ,单独再下载一个外置 jre 是为了使 jdk 版本稳定,让外置 jre 独立更新(一般推荐稳定版的jre8),但是不下载也不会运行不了Java程序。

    于是,又有一个问题出现了,之前的 jdk 本身包含了一套 jre ,再单独下载另一个版本的 jre ,运行java程序的时候不会发生版本冲突吗?
    我们先来看看 jdk 和 jre 之间的关系:

    问题二:jdk与jre的关系

    jre (java runtime environment),是java程序的运行环境。安装过程中,会自动添加PATH。面向Java程序的使用者,而不是开发者。
    jdk (java development kit),是java的开发工具包。集成了 jre 、各种类库和工具,例如:javac.exe,java.exe,jar.exe 等。需要配置环境变量。

    注:eclipse、idea等其他IDE有自己的编译器而不是用jdk bin目录中自带的,所以在安装时你会发现他们只要求你选中jre路径。

    即 jdk > jre

    以下是之前在windows下安装 jdk8 的目录截图:

    jdk 的子目录下也存在一个 jre:

    这两个 jre 用哪个都行,我们在安装 jdk 的时候可以选择不再安装 jre 而直接使用 jdk 中的 jre 运行我们的 Java 程序,只是刚开始装的时候不清楚 jdk 和 jre 之间的关系,默认两个都安装上了。但如果不开发,只是部署和运行 Java 程序的话,那么只需要安装 jre 即可,无需安装 jdk 。

    在 jdk 的 bin 目录下,基本上都是一些小的可执行文件,其实它们只是一层包装器,例如 javac.exe 内部调用的其实是 jdk 的 lib 目录中的 tools.jar 中 com.sun.tools.javac.Main 类,也就是说这些小的可执行文件只是入口而已,这样做的目的是避免输入的命令过长。实际上它们本身又都是由 Java 编写的,也需要由 jre 来提供运行时环境,所以在 jdk 目录下的 jre 既提供了这些工具的运行时环境,也提供了我们编写完成的 Java 程序的运行时环境。

    那么,当一台电脑安装两套以上的jre在运行程序时如何选择呢?由java.exe找到合适的jre来运行Java程序。

    Java.exe依照底下的顺序来查找jre:自己的目录下有没有 jre → 父目录下有没有 jre → 在PATH路径中找 jre (一般运行时从path中查找,按照path设置前后顺序,以前面为准) → 查询注册表: [HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime Environment]

    最常用的是在PATH路径中找jre,一般情况下,自己的程序运行之前都会先在批处理文件里面临时设置PATH,把自己用的jre放到PATH路径最前面,所以肯定会运行自己带的jre,不会造成版本混乱。

    第二章 语言基础

    Java 数据类型

    Java有两种数据类型,引用类型和基本类型。
    一个引用类型的变量提供对一个对象的引用,一个基本类型的变量保存一个基本类型。

    常量

    在Java中,用关键字<code_s> final </code_s>来声明一个常量。
    按照惯例,常量名都是大写的,单词之间用下划线隔开。

    字面值

    表示一个值的源代码叫做字面值。

    1.整数字面值

    十进制9的字面值:9
    十六进制9E的字面值:0x9E或0X9E
    八进制567的字面值:0567
    注:若整数字面值过长可在中间唯一位置用下划线将数字隔开,如:1000000可表示为1_000_000。

    2.浮点数字面值

    float字面值有如下格式:

    Digits .[Digits] [ExponentPart] f_or_F
    .Digits [ExponentPart] f_or_F
    Digits ExponentPart f_or_F
    Digits [ExponentPart] f_or_F

    注:[]之间的部分是可选的。
    举例:2e1f, 9.f, .5f, 0f, 3.14f, 9.0001e+12f

    double字面值有如下格式:

    Digits .[Digits] [ExponentPart] [d_or_D]
    .Digits [ExponentPart] [d_or_D]
    Digits ExponentPart [d_or_D]
    Digits [ExponentPart] [d_or_D]

    举例:2e1, 8.,.5,0.0D,3.14,9e-9d,7e123D

    3.布尔字面值

    布尔类型有两个值,字面值分别为true和false。

    基本类型转换

    加宽转换

    如下情况进行加宽转换:

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

    加宽转换是隐式地发生的,不需要在代码中做任何事情。

    收窄转换

    如下情况进行收窄转换:

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

    收窄转换必须是显式的,需要圆括号中指定目标类型。
    例1:
    <code_l>long a = 10;
    int b = (int) a;</code_l>
    例2:
    <code_l>long a = 9876543210L;
    int b = (int) a;</code_l>

    例1不会导致信息丢失,例2会导致信息丢失,会使程序引入一个缺陷。

    操作符

    一元操作符

    自增操作符++

    ++x:先输出x再自加
    x++:先自加再输出x
    例1:
    <code_l>int x = 4;
    int y = ++x;
    //y = 5, x = 5</code_l>
    例2:
    <code_l>int x = 4;
    int y = x++;
    //y = 4, x = 5</code_l>

    自减操作符--

    --x:先输出x再自加
    x--:先自加再输出x
    例1:
    <code_l>int x = 4;
    int y = --x;
    //y = 3, x = 3</code_l>
    例2:
    <code_l>int x = 4;
    int y = x--;
    //y = 4, x = 3</code_l>

    逻辑取反操作符!

    例:
    <code_l>boolean x = false;
    boolean y = !x;
    //此时y为true,x为false</code_l>

    位取反操作符~

    例:
    <code_l>boolean j = 2; //2的二进制0000 0000 0000 0000 0000 0000 0000 0010
    boolean k = ~j; //取反之后二进制为1111 1111 1111 1111 1111 1111 1111 1101(即十进制的-3)
    //此时k=-3, j=2 </code_l>

    条件操作符

    && 操作符

    && 操作符接受两个表达式作为操作数,二者均必须返回一个可以转换为一个布尔类型的值,若二者均为真,那么它返回真,否则返回假。

    || 操作符

    || 操作符接受两个表达式作为操作数,二者均必须返回一个可以转换为一个布尔类型的值,若二者至少有一个为真,那么它返回真,否则返回假。

    ?: 操作符

    ?: 操作符有3个操作数。语法如下:
    <code_l>expression1 ? expression2 : expression3</code_l>
    expression1必须返回一个能转换为布尔类型的值,若expression1为真,返回expression2,否则返回expression3。
    例如 (8<4)?2:4 返回4。

    位移操作符

    • 向左位移操作符<<
    • 向右位移操作符>>
    • 无符号位向右位移操作符>>>

    赋值操作符

    = += -+ *= /= %= <<= >>= >>>= &= ^= |=

    逻辑操作符 &|^

    & 表示一个AND操作
    | 表示一个OR操作
    ^ 表示一个异或操作

    第三章 语句

    在Java中,空语句是合法的,它什么也不做,如下所示:
    ;

    if 语句

    例:

    if (a==1){
        System.out.println("a=1");  
    } else if (a==2){
        System.out.println("a=2");
    } else {
        System.out.println("invalid");
    }
    

    while 语句

    例:

    int k = 0;
    while(true) {
    	System.out.println(k);
    	k++;
    	if(k>2){
    		break;
    	}
    }
    

    do-while 语句

    例:

    int i = 0;
    do {
    	System.out.println(i);
    	i++;
    } while (i<3)
    

    控制台将打印如下内容:
    <code_l>0
    1
    2</code_l>

    for 语句

    例:

    for(int i = 0; i < 3; i += 2) {
    	System.out.println(i);
    }
    

    控制台将打印如下内容:
    <code_l>0
    2</code_l>

    break 语句

    break终止循环的时候不会执行语句块中剩下的语句。
    例:

    start:
    for(int i=0;i<3;i++){
    	for(int j=0;j<4;j++){
    		if(j==2){
    			break start;
    		}
    	}
    	System.out.println(i+":"+j);
    }
    

    标签start用来表示第一个for循环,break start将会终止第一个循环。
    控制台将打印如下内容:
    <code_l>0:0
    0:1</code_l>

    continue 语句

    continue终止当前的迭代的执行,并且导致控制转向下一次迭代中。
    例:

    start:
    for(int i=0;i<3;i++){
    	for(int j=0;j<4;j++){
    		if(j==2){
    			continue start;
    		}
    	}
    	System.out.println(i+":"+j);
    }
    

    标签start用来表示第一个for循环,break start将会终止第一个循环。
    控制台将打印如下内容:
    <code_l>0:0
    0:1
    1:0
    1:1
    2:0
    2:1</code_l>

    switch 语句

    switch语句的语法如下所示:

    switch(expression){
    case value_1 :
    	statement(s);
    	break;
    }
    case value_2 :
    	statement(s);
    	break;
    }
    ...
    case value_n :
    	statement(s);
    	break;
    }
    default:
    	statement(s);
    }
    

    参考

    https://ihyperwin.iteye.com/blog/1513754
    https://blog.csdn.net/qq_35326718/article/details/79443911

  • 相关阅读:
    Java工作流引擎全局变量的介绍
    Java工作流系统-CCBPM如何自动升级?
    驰骋工作流系统-Java共工作流引擎配置定时任务
    那些年下过的大雨
    移动端APP列表点透事件处理方法
    关于React中状态保存的研究
    几个关于js数组方法reduce的经典片段
    关于React组件之间如何优雅地传值的探讨
    模拟制作网易云音乐(AudioContext)
    移动端效果之IndexList
  • 原文地址:https://www.cnblogs.com/PNIDEMOOO/p/10466601.html
Copyright © 2011-2022 走看看