导航
DOS命令
启动redis
redis-server.exe redis.windows.conf
Java介绍
- Java致力于检查程序在编译和运行时的错误。
- Java虚拟机实现了跨平台接口
- 类型检查帮助检查出许多开发早期出现的错误。
- Java自己操纵内存减少了内存出错的可能性。
- Java还实现了真数组,避免了覆盖数据的可能。
- 注意,是避免数据覆盖的可能,而不是数据覆盖类型
内存
- jvm堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区)。
- 常量池属于 PermGen(方法区)
![](https://img-blog.csdnimg.cn/img_convert/68735d1f92bdd918d67bc1000ba68d7a.png#clientId=u7db6f9ff-c2c2-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u6b9cfc0d&margin=[object Object]&originHeight=546&originWidth=1108&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=uef9fd9ec-e0ad-47cc-97bc-086909e6b74&title=)
GC回收机制
GC机制的优点是,系统会自动处理不再被引用的对象,在cpu空闲或者存储空间不足时进行清理,这样编程时就不用弄清内存管理机制,编程者无需管理内存,提高了编程的效率。
关键字
标识符规则
规则[1]Java标识符只能由数字、字母、下划线“_”或“
”符号以及
U
n
i
c
o
d
e
字符集组成
[
2
]
J
a
v
a
标识符必须以字母、下划线
“
”
或“
”符号以及Unicode字符集组成 [2]Java标识符必须以字母、下划线“_”或“
”符号以及Unicode字符集组成[2]Java标识符必须以字母、下划线“”或“”符号以及Unicode字符集开头
[3]Java标识符不可以是Java关键字、保留字(const、goto)和字面量(true、false、null)
[4]Java标识符区分大小写,是大小写敏感的
- 标识符的组成元素是字母(a-z,A-Z),数字(0~9),下划线(_)和美元符号($)。
- 标识符不能以数字开头。
- java的标识符是严格区分大小写的。
- 标识符的长度可以是任意的。
- 关键字以及null、true、false不能用于自定义的标识符
final
final
- final关键字可以用于成员变量、本地变量、方法以及类。
- final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。
- 你不能够对final变量再次赋值。
- 本地变量必须在声明时赋值。
- 在匿名类中所有变量都必须是final变量。
- final方法不能被重写。
- final类不能被继承。
- 没有在声明时初始化final变量的称为空白final变量(blank final variable),它们必须在构造器中初始化,或者调用this()初始化。不这么做的话,编译器会报错“final变量(变量名)需要进行初始化”。
- StringBuilder , StringBuffer ,String 都是 final 的。
volatile
- 禁止了指令重排
- 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量值,这个新值对其他线程是立即可见的
- 不保证原子性(线程不安全)
注释
标识符命名规则
字面量和常量
进制转换
基本类型
八大基本数据类型
byte,char,short,int,long,float,double,boolean
int
规则①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,
②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存
③两个都是new出来的,都为false
④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
类型转换
规则
规则1.若参与运算的数据类型不同,则先转换成同一类型,然后进行运算。
2.转换按数据长度增加的方向进行,以保证精度不降低。例如int型和long型运算时,先把int量转成long型后再进行运算。
3.所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
4.char型和short型参与运算时,必须先转换成int型。
5.在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。
Java表达式转型规则由低到高转换:
- 所有的byte,short,char型的值将被提升为int型;
- 如果有一个操作数是long型,计算结果是long型;
- 如果有一个操作数是float型,计算结果是float型;
- 如果有一个操作数是double型,计算结果是double型;
- 被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
String
- ==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 如果作用于引用类型的变量,则比较的是所指向的对象的地址
- String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。
- equals不能作用于基本数据类型的变量。
- 任何字符与字符串相加都是字符串,但是是有顺序的,字符串前面的按原来的格式相加,字符串后面的都按字符串相加
变量
- ++y 是先加再运行,y++ 是先运算再加。
- 根据作用域规则,在函数中定义的变量只能在函数中引用
- 在函数中定义的变量,其生存期为整个程序执行期间
运算符和表达式
运算符的优秀级
算术和逻辑运算符
运算符“>>”执行算术右移,它使用最高位填充移位后左侧的空位。
右移的结果为:每移一位,第一个操作数被2除一次,移动的次数由第二个操作数确定。
逻辑右移或叫无符号右移运算符“>>>“只对位进行操作,没有算术含义,它用0填充左侧的空位。
算术右移不改变原数的符号,而逻辑右移不能保证这点。
移位运算符约简其右侧的操作数,当左侧操作数是int类型时,右侧以32取模;当左侧是long类型时,右侧以64取模。
控制语句
switch
- 在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,呼吁很久的String支持也终于被加上了。
- 在switch语句中,表达式的值不能是null,否则会在运行时抛出NullPointerException。在case子句中也不能使用null,否则会出现编译错误。
循环语句
方法
Java内存划分
数组
- 定义数组,等号左边不能出现数字,也就是数组的不管什么大小 不能出现在左边。
数组第一个就是为什么左边不用标大小,而右边需要标大小?
首先数组一个对象,它不属于任何类,由jvm在运行期间在堆中创建并继承object,同时添加length属性。由于数组对象所占的内存在堆上,所以在声明时应明确告诉jvm自己所占的大小,方便分配,又因为数组对象的引用在栈中,所以声明时左边就无需标大小,之所以写成2个括号,就是为了表明这个引用指向堆中的二维数组。
第二个就是为什么右边数组可以只声明几行,无需声明没行的大小?
大概jvm在运行期间会根据行数分配对应的可扩展空间,方便每一行进行扩充。其实又可以按c语言那样理解,行其实又是一种引用,行首地址又代表一个一维数组。欢迎大佬对第二问题进行补充。