目录
基本数据
数据截断:
/*
* 300的二进制编码 100101100
* 44的二进制编码101100
* 一byte8个二进制位发生截断
* 输出44
* */
System.out.println((byte)(300));
移位运算符:
/*
* m<<n 表示m的每个二进制位向左移动n位,相当于*2^n
* m>>>n 表示m的每个二进制位向右移动n位,最高位用0补(逻辑右移)
* m>>n 表示m的每个二进制位向右移动n位,最高位用原先最高位的补 ,正数补0,负数补1(算术右移)
* */
System.out.println((1<<2)==4);
System.out.println(-1>>2);
System.out.println(-1>>>2);
case标签的类型:
char byte short 或int的常量表达式
枚举常量
字符串字面值
数组
一维数组
int[]a1=new int[]{0,0,0,0,0};
int[]a2=new int[5];
int []a3={1,2,3,4,5}
多维数组
int[][] magicSquare =
{
{16, 3, 2, 13},
{5, 10, 11, 8},
{9, 6, 7, 12},
{4, 15, 14, 1},
};
int[][] odds = new int [NMAX + 1] [] ;
for (int n = 0; n <= NMAX ; n++)
odds[n] = new int [n + 1] ;
在java允许创建长度为0的数组,这对于碰巧结果为0处理的很好,不需要单独判断
命令行参数
在 Java 应用程序的 main 方法中, 程序名并没有存储在 args 数组中例如:当使用下列命令运行程序时
java Message -h world
args[0] 是“ -h”, 而不是“ Message” 或“ java”
类
类的关系:
依赖(use a)
如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。
应该尽可能地将相互依赖的类减至最少。 如果类 A 不知道 B 的存在, 它就不会关心 B的任何改变(这意味着 B 的改 变不会导致 A 产生任何 bug )。用软件工程的术语来说, 就是让类之间的耦合度最小
聚合(has a)
继承(is a)
初始化块:
初始化块相当于将初始化块中的内容放入了构造函数的最前面
初始化过程:
所有数据域被初始化为默认值(0、 false 或 null)
调用父类构造方法
按照在类声明中出现的次序, 依次执行所有域初始化语句和初始化块。
执行这个构造函数的剩余主体
重载:
要完整地描述一个方法,需要指出方法名以及参数类型。这叫做方法的签名,返回类型不是方法签名的一部分。 也就是说, 不能有两个名字相同、 参数类型也相同却返回不同类型值的方法。
时间
Date:时间点
LocalDate:表示日历如2019-03-25
杂:
final 只能保证在某个变量的引用不会再指向其他对象,但这个对象内部可以改变
本地方法可以绕过 Java 语言的存取控制机制
类加载器的直观作用:
在默认情况下,包不是一个封闭的实体。也就是说, 任何人都可以向包中添加更多的类。当然,有敌意或低水平的程序 员很可能利用包的可见性添加一些具有修改变量功能的代码。例如,在 Java 程序设计语言的早期版本中, 只需要将下列这条语句放在类文件的开头, 就可以很容易地将其他类混入 java.awt包中:package java.awt;
然后把结果类文件放置在类路径某处的 java/awt子目录下, 就可以访问 jaVa.awt 包的内部了。使用这一手段, 可以对警 告框 进行设置从 1.2 版开始, JDK 的实现者修改了类加载器(双亲委托机制), 明确地禁止加载用户自定义的、 包名以“ java.” 开始的类!