java一些遗忘的知识点

java应用程序的运行机制

源文件(*java)通过java编译器 到字节码文件(*class) 然后在虚拟中运行(类装载器,字节码校验器,解释器)

一些包含关系(从上到下依次包含)

  • JVM(Java Virtual Machine)
  • JRE(Java Runtime Environment)
  • JDK(Java Development Kit)

一些注意的点

  • 一个源文件中至多只能声明一个public类,其他类个数不限,并且文件名必须和其中定义的public类名相同

java基础语法注意点:

  • 标识符必须以字母、下划线_、美元符号 开 头 。 标 识 符 其 它 部 分 可 以 是 字 母 、 下 划 线 “ ” 、 美 元 符 “ 开头。 标识符其它部分可以是字母、下划线“_”、美元符“ 线”和数字的任意组合。Java 标识符大小写敏感,且长度无限制。标识符不可以是Java的关键字。

  • 表示类名的标识符:每个单词的首字母大写,如Man, GoodMan表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为“驼峰原则”,如eat(), eatFood()

  • 局部变量: 方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。

  • 成员变量:方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。

  • 实例变量的默认初始值

数据类型 初始值
int 0
double 0.0
char ‘\u0000’
boolean false
  • 静态变量:使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。 (注:讲完内存分析后我们再深入!先放一放这个概念!)如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值

  • 基本数据类型

java一些遗忘的知识点_第1张图片

  • Java 语言整型常量的四种表示形式
    十进制整数,如:99, -500, 0
    八进制整数,要求以 0 开头,如:015
    十六进制数,要求 0x 或 0X 开头,如:0x15
    二进制数,要求0b或0B开头,如:0b01110011
    Java语言的整型常数默认为int型,声明long型常量可以后加‘ l ’或‘ L ’ 。

  • 浮点类型 :
    十进制数形式,例如:3.14 314.0 0.314
    科学记数法形式,如314e2 314E2 314E-2 (3.14)
    float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或者d, 以明确其为double类型。

  • 浮点数是不精确的,一定不能用于比较

  • 同样,这里涉及到引用数据类型和基本数据类型的比较问题:
    引用数据类型:类、接口类型、数组类型、枚举类型、注解类型。
    基本数据类型比较的话直接’==’,直接比较的是地址,而引用数据类型需要使用.equals()方法进行值的比较

  • 转义字符

转义符 含义 Unicode值
\b 退格 \u0008
\n 换行 \u000a
\r 回车 \u000d
\t 制表符 \u0009
" 双引号 \u0022
单引号 \u0027
\ 反斜杠 \u005c
  • 小问题

这里记录一下我一直搞错的一个小知识点

    public static void main(String[] args) {
        boolean man = false;
        if(man = false){//这里判断的逻辑是false先赋值给man,然后在对man的值进行判断(以前我一直以为是判断的是false赋值成功没,赋值成功的话就执行接下来的语句)
            System.out.println("男性");
        }
    }
  • 二元运算符的运算规则:

整数运算:
  1. 如果两个操作数有一个为Long, 则结果也为long。
  2. 没有long时,结果为int。即使操作数全为short,byte,结果也是int。
  浮点运算:
  3. 如果两个操作数有一个为double,则结果为double。
  4. 只有两个操作数都是float,则结果才为float。

  • 取模运算:
    其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同

  • 异或:相同为false ,不同为true

  • &与&& 的区别:
    &两边都执行;&&如果一边符合条件另一边不执行

  • 刚学到一个3取反码之后为-4 遇到这个问题第一反应就是学过,但是具体原理已经遗忘的差不多了,于是查了下是这样的:
    1.数值在内存中一补码形式表示
    2.正数的原码、反码、补码形式上都是相同的;因此,3(unsigned char)的原码、反码、补码为以下:
    00000011 (原码)
    00000011 (反码)
    00000011(补码,内存中的存在形式)

  1. 如何求一个负数的补码:将该数的绝对值的二进制形式,按位取反再加1。以-4为例:
    (1)4的原码:00000100
    (2)取反:111111011
    (3)再加1:11111100 (得-4的补码,-4在内存中的存在形式)
  2. 对3取反码~3,即是对内存中的3(00000011)取反为11111100,即是-4在内存中的表现形式,输出来即为-4.
    (一些基础性的知识还有有必要了解的)
  • int b = 3<<2; //相当于:322

  • 一个要注意的运算符优先级问题:逻辑与、逻辑或、逻辑非的优先级一定要熟悉!(逻辑非>逻辑与>逻辑或)。如:a||b&&c的运算结果是:a||(b&&c),而不是(a||b)&&c

  • switch的一个简单用法:

int rand = (int) (26 * Math.random());
        char c2 = (char) (c + rand);
        System.out.print(c2 + ": ");
        switch (c2) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            System.out.println("元音");
            break;
        case 'y':
        case 'w':
            System.out.println("半元音");
            break;
        default:
            System.out.println("辅音");
  • 带标签的continue和break
public class Test18 {//控制嵌套循环跳转(打印101-150之间所有的质数)
    public static void main(String args[]) {
        outer: for (int i = 101; i < 150; i++) {
            for (int j = 2; j < i / 2; j++) {
                if (i % j == 0){
                    continue outer;
                }
            }
            System.out.print(i + "  ");
        }
    }
}
  • 待解决的一个难点:
    通过移位运算来解决进制转化问题

  • 导包的一个小技巧

import static java.lang.Math.*;//导入Math类的所有静态属性
import static java.lang.Math.PI;//导入Math类的PI属性
  • 匿名内部类
new  父类构造器(实参类表) \实现接口 () {
           //匿名内部类类体!
}
  • 局部内部类:定义在方法内部

  • foreach循环 : 用于读取数组或集合元素的值,不能修改

你可能感兴趣的:(基础回看,java)