• Java简介
  1. 安装完JDK后,需要设置一个JAVA_HOME的环境变量,它指向JDK的安装目录。在Windows下,它是安装目录,类似:

    C:\Program Files\Java\jdk-15

    JAVA_HOMEbin目录附加到系统环境变量PATH上。在Windows下:

    Path=%JAVA_HOME%\bin;<现有的其他路径>

    JAVA_HOMEbin目录添加到PATH中是为了在任意文件夹下都可以运行java

  2. 可执行文件javac是编译器,而可执行文件java就是虚拟机,给虚拟机传递的参数是我们定义的类名,虚拟机自动查找对应的class文件并执行。
  3. 安装插件除了问题
  • Java程序基础
  1. 引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置。
  2. 定义变量的时候,如果加上final修饰符,这个变量就变成了常量:
    final double PI = 3.14; // PI是一个常量

    常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。根据习惯,常量名通常全部大写。

  3. var sb = new StringBuilder();

    编译器会根据赋值语句自动推断出变量sb的类型是StringBuilder。对编译器来说,该语句实际上会自动变成:

    StringBuilder sb = new StringBuilder();
  4. 整数的数值表示不但是精确的,而且整数运算永远是精确的,即使是除法也是精确的,因为两个整数相除只能得到结果的整数部分。
    System.out.println(7/2);  //结果为2
  5. 整数的除法对于除数为0时运行时将报错,但编译不会报错。
  6. 整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错
      0111 1111 1111 1111 1111 1111 1111 1000
    + 0000 0000 0000 0000 0000 0000 0000 1111
    -----------------------------------------
    1000 0000 0000 0000 0000 0000 0000 0111
  7. 正数的原码、反码、补码都一样,负数的反码是按位取反(符号位不变),补码是取反后+1。
  8. 移位运算:逻辑左移右补0,逻辑右移左边补符号位;无符号右移(左移)左(右)补0,不区分正负。
  9. 在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,shortint计算,结果总是int,原因是short首先自动被转型为int。
  10. 强制转型,即将大范围的整数转型为小范围的整数。会截取低位内容,扔掉高位。
  11. 在一个复杂的四则运算中,两个整数的运算不会出现自动提升的情况
    float f = 4.5f + 12 / 5;
    System.out.println(f);
    //结果为6.5
  12. 整数运算在除数为0时会报错,而浮点数运算在除数为0时,不会报错,但会返回几个特殊值:

    double d1 = 0.0 / 0; // NaN
    double d2 = 1.0 / 0; // Infinity
    double d3 = -1.0 / 0; // -Infinity
    • NaN表示Not a Number
    • Infinity表示无穷大
    • -Infinity表示负无穷大
  13. && 与 || 有短路运算
  14. 一个char保存一个Unicode字符。
  15. Java在内存中总是使用Unicode表示字符,一个英文字符和一个中文字符都用一个char类型表示,它们都占用两个字节。要显示一个字符的Unicode编码,只需将char类型直接赋值给int类型即可。
  16. 还可以直接用转义字符\u+Unicode编码来表示一个字符。

    // 注意是四位十六进制:
    char c3 = '\u0041'; // 'A',因为十六进制0041 = 十进制65
    char c4 = '\u4e2d'; // '中',因为十六进制4e2d = 十进制20013
  17. Java 13开始,字符串可以用"""..."""表示多行字符串(Text Blocks)。
    public class Main {
    public static void main(String[] args) {
    String s = """
    SELECT * FROM
    users
    WHERE id > 100
    ORDER BY name DESC
    """;
    System.out.println(s);
    }
    }
    /*
    输出:
    SELECT * FROM
    users
    WHERE id > 100
    ORDER BY name DESC
    */
  18. 请将一组int值视为字符的Unicode编码,然后将它们拼成一个字符串。
    public class JavaTest {
    
        public static void main(String[] args) {
    int a = 72;
    int b = 105;
    int c = 65281;
    // FIXME:
    String s = "" + (char)a + (char)b + (char)c;
    System.out.println(s);
    } }
  • 流程控制
  1. 如果要把数据显示成我们期望的格式,就需要使用格式化输出的功能。格式化输出使用System.out.printf(),通过使用占位符%?printf()可以把后面的参数格式化成指定格式。由于%表示占位符,因此,连续两个%%表示一个%字符本身。
  2. 数字运算时的自动类型转换要看右边计算的数字的类型,而不是看左边最终结果的类型。
  3. 浮点数在计算机中常常无法精确表示,并且计算可能出现误差,因此,判断浮点数相等用==判断不靠谱。
    public class Main {
    public static void main(String[] args) {
    double x = 1 - 9.0 / 10;
    System.out.println(9.0 / 10);
    if (x == 0.1) {
    System.out.println("x is 0.1");
    } else {
    System.out.println("x is NOT 0.1");
    }
    }
    } 0.9
    x is NOT 0.1

    正确的方法是利用差值小于某个临界值来判断:

    public class Main {
    public static void main(String[] args) {
    double x = 1 - 9.0 / 10;
    if (Math.abs(x - 0.1) < 0.00001) {
    System.out.println("x is 0.1");
    } else {
    System.out.println("x is NOT 0.1");
    }
    }
    }
  4. 使用switch时,如果遗漏了break,就会造成严重的逻辑错误,而且不易在源代码中发现错误。从Java 12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break语句.
     case "apple" -> System.out.println("Selected apple");

    注意新语法使用->,如果有多条语句,需要用{}括起来。不要写break语句,因为新语法只会执行匹配的语句,没有穿透效应。使用新的switch语法,不但不需要break,还可以直接返回值。把上面的代码改写如下:

    public class Main {
    public static void main(String[] args) {
    String fruit = "apple";
    int opt = switch (fruit) {
    case "apple" -> 1;
    case "pear", "mango" -> 2;
    default -> 0;
    }; // 注意赋值语句要以;结束
    System.out.println("opt = " + opt);
    }
    }
  5. 使用for each循环打印也很麻烦。幸好Java标准库提供了Arrays.toString(),可以快速打印数组内容。
    import java.util.Arrays;
    
    public class Main {
    public static void main(String[] args) {
    int[] ns = { 1, 1, 2, 3, 5, 8 };
    System.out.println(Arrays.toString(ns));
    }
    }

Java学习_Java快速入门的更多相关文章

  1. 前端学习 node 快速入门 系列 —— 初步认识 node

    其他章节请看: 前端学习 node 快速入门 系列 初步认识 node node 是什么 node(或者称node.js)是 javaScript(以下简称js) 运行时的一个环境.不是一门语言. 以 ...

  2. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  3. Java程序员快速入门Go语言

    这篇文章帮助Java程序员快速入门Go语言. 转载至 开源中国社区. http://www.oschina.net 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将 ...

  4. Java学习笔记之---入门

    Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...

  5. 前端学习 node 快速入门 系列 —— npm

    其他章节请看: 前端学习 node 快速入门 系列 npm npm 是什么 npm 是 node 的包管理器,绝大多数 javascript 相关的包都放在 npm 上. 所谓包,就是别人提供出来供他 ...

  6. 前端学习 node 快速入门 系列 —— 模块(module)

    其他章节请看: 前端学习 node 快速入门 系列 模块(module) 模块的导入 核心模块 在 初步认识 node 这篇文章中,我们在读文件的例子中用到了 require('fs'),在写最简单的 ...

  7. 前端学习 node 快速入门 系列 —— 简易版 Apache

    其他章节请看: 前端学习 node 快速入门 系列 简易版 Apache 我们用 node 来实现一个简易版的 Apache:提供静态资源访问的能力. 实现 直接上代码. - demo - stati ...

  8. 前端学习 node 快速入门 系列 —— 服务端渲染

    其他章节请看: 前端学习 node 快速入门 系列 服务端渲染 在简易版 Apache一文中,我们用 node 做了一个简单的服务器,能提供静态资源访问的能力. 对于真正的网站,页面中的数据应该来自服 ...

  9. 前端学习 node 快速入门 系列 —— 报名系统 - [express]

    其他章节请看: 前端学习 node 快速入门 系列 报名系统 - [express] 最简单的报名系统: 只有两个页面 人员信息列表页:展示已报名的人员信息列表.里面有一个报名按钮,点击按钮则会跳转到 ...

随机推荐

  1. IO模式 select、poll、epoll

    阻塞(blocking).非阻塞(non-blocking):最常听到阻塞与非阻塞这两个词就是在函数调用中,比如waitid这个函数,通过NOHANG参数可以把waitid设置为非阻塞的,也就是问询一 ...

  2. java编写规范及注意事项

    java编写规范及注意事项 1.注释 常见注释有三种  //   /**/ /****/ 如何才能写出漂亮的注释呢,注释的目的就是为了使你的代码让人更容易理解和维护,写一手好的注释是一个优秀码农的基本 ...

  3. 使用zabbix监控Jenkins

    一.监控架构图 二.实现思路 在 Jenkins 上安装 Metrics 插件,使 Jenkins 暴露 metrics api: 编写python代码从api抓取数据,并将数据解析为zabbix可以 ...

  4. Java多线程中的wait/notify通信模式

    前言 最近在看一些JUC下的源码,更加意识到想要学好Java多线程,基础是关键,比如想要学好ReentranLock源码,就得掌握好AQS源码,而AQS源码中又有很多Java多线程经典的一些应用:再比 ...

  5. How tomcat works(深入剖析tomcat)阅读笔记1-4章

    How tomcat works chapter 1 简单的web服务器 这一张的主要内容就是实现一个简单的静态资源服务器,socket编程,利用java提供的socket和serverSocket编 ...

  6. JVM(四)-虚拟机对象

    概述: 上一篇文章,介绍了虚拟机类加载的过程,那么类加载好之后,虚拟机下一步该干什么呢.我们知道java是面向对象的编程语言,所以对象可以说是java'的灵魂,这篇文章我们就来介绍 虚拟机是如何创建对 ...

  7. 我与UML相爱相杀的狗血日常

    前言 该怎么说呢,在专业母亲的包办婚姻和我不得不为日后的百万家产[日后的百万年薪,我怕是在做梦]下,我和UML的婚后生活正式开始了.第一天回娘家我亓老师就给出了她最爱的编程作业.说实话,我当初以头发为 ...

  8. python之Bug之字符串拼接bug

    \r\n拼接Bug 环境: python3.4.pycharm2017 偶然的学习中遇到了一个问题,百思不得姐,什么问题呢,大家输入太快了,难免有失误就如下面的代码 #构造响应数据 response_ ...

  9. Python音视频开发:消除抖音短视频Logo的图形化工具实现

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现 ...

  10. 第8.24节 使用__subclasses__查看类的直接子类

    在<第8.9节 Python类中内置的__bases__属性>中介绍了__bases__这个类的特殊变量可以查看类的直接父类,而__subclasses__() 方法的使用则与__base ...