🛫 关于变量和常量你都知道啥?
变量
首先,变量的声明遵循以下规范:
只能包含字母、数字、美元符(“$”)、下划线(“_”),但是不能以数字开头,且"$“和”_"并不推荐在命名的时候使用
不能使用Java中的保留字
变量的命名区分大小写
虽不强制要求,但是尽量使用小驼峰(第一个单词首字母小写其他单词的首字母大写)命名
其次,Java支持一次声明多个变量但并不提倡,因为这种形式会降低程序的可读性(int i, j;),可以使用逐一声明的形式,而且变量的声明要尽可能的靠近变量第一次使用的地方
最后,变量声明之后还必须要进行初始化才能使用,否则会编译器就会认为这个变量的使用是非法的。变量的初始化有三种机制:
构造器:Java中如果没有在构造器中显式的为字段设置初始值的话,就会将其设置成默认值,也就是不同数据类型数据所对应的默认值
显式赋值:也就是最常见的使用等于号
初始化代码块:Java中将类中使用花括号包裹起来的几行代码称为是初始化代码块,初始化代码块随着类的加载而加载,只要构造这个类的对象就会执行这个块里的代码。而且初始化代码块中的代码会在main方法之前执行,初始化代码块中定义的变量和构造器一样有默认值机制
类变量(static修饰的变量)、实例变量可以使用构造器、显式赋值和初始化块三种机制进行初始化,但是局部变量则只能也必须使用赋值语句进行显式初始化。常量
Java中常量必须在main方法的外部使用final进行定义,常量定义的时候必须进行初始化,一旦初始化之后就无法改变值的大小,且常量的命名必须全部大写。静态变量和静态常量
静态变量也叫类变量是使用static修饰的变量,静态变量属于类而不属于任何单个的对象,也就是说即使不创建该类的对象这个静态变量依然存在,不管创建多少个对象都是共享这一个静态变量。非静态变量也就是实例变量就不一样了,实例对象属于对象,必须使用对象调用无法直接调,每创建一个对象都会得到一个实例变量的副本,不同对象之间互不影响 静态常量的使用频率要明显高于静态变量,在静态常量定义的时候往往都会加上final修饰,这样的话它既可以被其他类直接使用类名调用,又不用担心字段值被调用后随意修改产生的安全问题。之前输出语句的时候使用的out就是一个final修饰的PrintStream类型的静态常量,PrintStream类里又内置了print、println、printf等方法用于输出
🛫 &和&&、|和||有什么区别?
&(逻辑与)和|(逻辑或)是逻辑运算符,&&(短路与)和||(短路或)是短路逻辑运算符。这两种运算符对应的的运算结果相同,与运算的话是全真为真、有假则假,或运算的是全假为假、有真则真。两种类型的运算符区别在于:逻辑运算符会执行完左右两边的表达式之后返回一个结果,短路逻辑运算符当能够得到结果的时候就会直接返回,也就是说短路与的左边结果为false就会直接返回false,短路或的左边结果为true就会直接返回true
补充一种进行位移运算的位运算符,位移运算就是对一个数值的二进制表示进行左右移动的运算,其中>>表示右移高位符号位补充,<<表示左移低位补0,>>>则是右移高位补0,注意:并没有<<<这个运算符
🛫 关于字符串的问题你能答对几道?
🪂 可以修改一个字符串中的值吗?
不能。因为Java中字符串并不是内置的数据类型,而是标准Java类库中提供的一个预定义类。字符串不只一种使用new的实例化方式,使用双引号(“”)括起来的字符都是String类的一个实例,使用new方式实例的对象对分配在堆内存中,使用双引号实例的对象在常量池中,字符串变量的值则是字符串对象的地址引用,不管使用哪种方式给字符串变量重新赋一个新值都是看上去改变了这个字符串的值,实际上只不过是改变了变量值的地址引用,原来的字符串对象还在内存中存储且值不变
由上图就得以验证我们之前的结论是正确的,使用双引号实例化的字符串对象存储在字符串常量池中,所以连续创建两个内容相同的字符串会指向同一个地址。而且使用new实例化的字符串对象存储在堆内存中,所以说使用两种方式实例化内容相同的字符串对象,地址会不同。接下来的三种方式改变字符串的内容,地址都和原地址不同,也就是证实了字符串是一个不可变的数据类型