2023.12.31 Java学习

发布时间 2023-12-31 22:52:51作者: KJHo

1.局部变量在声明时需要初始化。

2.实例变量在类中声明但在方法/构造函数或块之外,如果不初始化会被赋予默认值(数值类型为0,boolean类型为false,对象引用类型为null)。

3.参数变量:方法或构造函数声明中的变量。仅用于接收调用该方法或构造函数时传递的值,参数变量的作用域只限于方法内部。

4.局部变量在栈上分配;没有默认初始值。
成员变量名可以通过变量名访问,但在静态方法以及其他类中,应该使用完全限定名:ObjectReference.VariableName。

5.如果一个静态变量依赖于另一个变量,那么它必须在后面定义。

6.静态变量在java中属于类,因此访问时需要考虑线程安全性。静态变量在内存中只有一份拷贝,被所有实例共享。因此,如果一个线程修改了,静态变量的值,那么其他线程在访问该静态变量时也会看到修改后的值。这可能会导致并发访问的问题,因为多个线程可能同时修改静态变量,导致不确定的结果或数据一致性。

7.静态变量通常用于:
(1)存储全局状态或配置信息
(2)计数器或统计信息
(3)缓存数据或共享资源
(4)工具类的常量或方法
(5)单例模式中的实例变量

8.访问修饰符
default:在同一包内可见
private:在同一个类内可见(不能用于修饰外部类)
public:对所有类可见
java中main方法必须是公有的,否则java编译器将不能运行该类
protected:同一个包内的类和所有子类可见(不能用于修饰外部类)

9.非访问修饰符
static 静态,修饰方法和变量
final 用来修饰类/方法和变量,final修饰的类不能被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,不可修改
abstract 用于创建抽象类和抽象方法
synchronized(同步)和volatile(不稳定) 主要用于线程的编程

10.无论创建多少个对象,静态变量只有一份拷贝,静态变量也被称为类变量
⚠️局部变量不能被声明为静态变量
静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据

11.一个类不能同时被final和abstract修饰,如果一个类中包含有一个抽象方法,那么该方法就一定要声明为抽象类,否则会出现编译错误

12.抽象方法不能被声明为final和abstract。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类
如果一个类包含抽象方法必须声明为抽象类,但抽象类不一定要有抽象方法。
抽象方法以;结尾:例如public abstract sample();

13.synchronized(【过去式】v.同步)关键字声明的方法在同一时间只能被一个线程访问,synchronized可以应用于四个修饰符

14.序列化的对象包含被transient修饰的实例变量时,jvm会跳过该特定的变量
用来预处理类和变量的数据类型

15.字节流由字节组成,字符流由字符组成。字节流是最基本的,所有InputStream和OutputStream的子类都是,主要用在二进制处理数据,它是按字节来处理的。但是实际中很多都是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化。在从字节流转化为字符流时,就是byte[]转化为String时,public String(byte bytes[], String charsetName),通常我们都省略了,系统就用操作系统默认的long。java里字符是由两个字节(字节是内存表示单位,一个字节是8位bit,一个bit相当于一个电信号,只能表示0/1,因为电脑存储都是二进制的,所以他的最小单位就是bit)

16.流式传输
流式传输主要是指将整个音频和视频及三维媒体等多媒体文件经过特定的压缩方式解析成一个个压缩包,由视频服务器向用户计算机顺序或实时传送。在采用流式传输方式的系统中,用户不必像采用下载方式那样将整个文件下载完毕,而是只需经过几秒或几十秒的启动延时即可在用户的计算机上利用解压设备对压缩的A/V、3D等多媒体文件解压后进行播放和观看。此时多媒体文件的剩余部分将在后台的服务器内继续下载。

17.Java序列化:将对象转换成二进制字节流的过程
反序列化:将在序列化过程中所生成的二进制字节流转换成对象的过程
应用场景:对象进行网络传输、存储到文件、存储到数据库、存储到内存

18.transient(adj.短暂的)修饰符只能修饰变量,阻止实例中被transient修饰的变量序列化;反序列化时,被transient修饰的变量值不会给持久化和恢复。
transient修饰的变量在反序列化后值会被设置为类型的默认值,例如:int类型反序列化后结果为0。
static变量因为不属于任何对象,无论是否被transient修饰都不会被序列化。

19.volatile(adj.不稳定的)修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读区该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值写回到共享内存。这样在任何时刻,两个不同的线程总是能看到某个成员变量的同一个值。
⚠️volatile对象引用的可能是null