Transient关键字只能修饰变量,而不能修饰方法和类,本地变量不能被transient关键字修饰
被transient关键字修饰的变量不能被序列化,一个静态变量不管是否被transient修饰,均不能序列化
一旦变量被transient修饰,变量将不再是第项持久化的一部分,该变量内容在序列化后无法获得访问。也可以认为在将持久化的对象反序列化后,被transient修饰的变量将按照普通类成员变量一样被初始化
Instanceof关键字是用来指出对象是否是特定类的一个实例,返回值是Boolan
判断一个对象到底是哪个类的实例
Volatile是Java提供的一种轻量级的同步机制, Java语言包含两种内在的同步机制:同步块(或方法)和volatile变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为他不会引起线程上下文的切换和带哦都,但是volatile变量的同步性较差(又是他更简单并且开销更低),而且其使用也更容易出错
锁提供的两种主要特性:互斥和可见性
互斥即一次只允许一个线程持有某个特定的锁,一次就只有一个线程能够使用该共享数据
可见性要更加复杂一些,他必须确保释放锁之前对共享数据做出更改对于随后获得该锁的另一个线程是可见的。即当一条线程修改了共享变量的值,新值对于其他线程来说是可以立即得知的
Synchronized:
Synchronized已经不再是一个简单粗暴的线程锁了,通过引入偏向锁/轻量锁等机制对其进行一系列优化
用法:
静态同步方法(静态同步方法用的锁对象是当前类的class对象)
普通同步方法(普通同步方法用的锁是当前对象)
同步代码块(同步代码块用的锁对象是指定的一个已存在的对象)
Const关键字:
Const用于定义常变量时,要进行初始化:const int a=10;//const封锁a,a为左值,使用啊的写权限,合法
数据类型对于const而言是透明的:const int a=10;等价于int const a=10;
Const int *p1=&a;等价于int const* p1=&a;当不等价于int* const p1=&a;
Const修饰*p1,将p1作为左值合法,将*p作为左值不合法
Const修饰p1,将*p1作为左值不合法,将*p作为左值合法
Const用于封锁直接修饰的内容 ,该内容变为只读,该变量不能作为左值(放在赋值号‘=’的左边,使用变量的写权限)
Fianl:
Final总体来说指的是不可变的
1、修饰数据:
数据不可变,为常量,用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变他的值
Final修饰引用变量时,只是限定了引用变量的引用不可改变,即不能将变量再次引用另一个对象,但是引用对象的值是可以改变的,即如果使用final修饰一个对象,而此对象还有别的属性,那么这个对象的地址的引用不可改变,而对象的属性的值是可以改变的
Final修饰的数据的值是不可以改变的,所以必须确保在使用前就已经对成员变量赋值了,因此对于final修饰的成员变量,有且仅有两个地方可以给他赋值,一个是声明该成员时赋值,另一个是在构造方法中赋值,在这两个地方必须给他们赋值
同时使用static和final修饰的成员在内存中只占据一段不能改变的存储空间
2、修饰方法参数:
在参数前面添加final关键字,他表示在整个方法中,不能改变参数的值
3、修饰方法:
表示方法不能被覆盖,所有private方法都是隐式的指定为是final,由于无法在类外部使用private方法,所以也就是无法覆盖他
4、修饰类
用final修饰的类无法被继承,
Static:
Static方法就是没有this的方法,在static方法内部不能调用非静态方法和变量,在非静态方法中能调用静态方法和变量,在没有创建任何对象的前提下,可以通过类本身来调用static方法,即static的基本作用是方便在没有创建对象的情况下进行调用方法或变量
Static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名进行访问
Static方法(静态方法):
由于静态方法不依赖任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为他不依赖任何对象,既然没有对象,就谈不上this。由于这个特性,在静态方法中不能访问类的非静态成员和非静态方法,因为非静态成员和方法必须依赖具体的对象才能被调用。
Main()方法必须是static的,是因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问
Static变量(静态变量):
静态变量和非静态变量的区别:静态变量被所有对象共享,在内存中只有一个副本,当且仅当在类初次加载时会被初始化,而非静态变量时对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
静态成员变量虽然独立于对象,但是不代表不可以通过对象区访问,所有的静态方法和静态变量都可以通过对象访问(只要访问权限足够)
原文:https://www.cnblogs.com/hongzxc/p/10946310.html