使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
例如:对于如下语句
final StringBuffer a = new StringBuffer (“immutable”);
执行如下语句将报告编译期错误
但是执行如下语句则可以通过编译
有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:
实际上,这是不可能的,在该方法内部仍然可以增加如下代码来修改参数对象
我们先把他们单独拎出来说
关于“==”:==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等。只能用 这一操作符。
如果一个变量指向的数据是对象类型的,那么这时候设计了两块内存,对象本身占用一块内存(堆内存)变量也占用一块内存,例如Object obj = new Object();变量obj是一个内存,new Object是另一个内存。此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就要用双等操作符进行比较。
关于equals:equals方法就是比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。。
例如:对于下面两个代码:
a、b两个变量分别指向了两个不同的对象,它们的首地址是不同的,即a和b 中所存储的数值是不同的。所以a==b将返回false,而这两个对象的内容是相同的,所以表达式a.equals(b)将返回true
在语法定义上的区别:
在程序运行时的区别:
总之 :实例变量必须创建对象后才能通过这个对象来使用,静态变量则可以直接使用类名来引用,
示例:
public class VariantTest{
public static int staticVar = 0;
int instanceVar = 0;
public VariantTest(){
staticVar++;
instanceVar++;
System.out.println("staticVar="+staticVar + ",instanceVar="+instanceVar);
}
}
在上面的程序中,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是每创建一个实例对象,就会分配一个instanceVar,即可能分配多一个instanceVar,并且每个instanceVar的值都只会自加了一次。
不可以
因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时可能还没有创建任何实例对象,如果从一个static方法内部发出对非static方法的调用,那个非static方法是关联到对象上的呢?这个逻辑是无法成立的。
是java提供的八种原始数据类型之一。java为每个原始类型提供了封装类。
是java为int提供的封装类,int的默认值为0,而integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,
例如:
要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认值为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以int不适合作为web层的表单数据的类型
Math中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与他们的英文名称的含义相对应。
例如
ceil:意味天花板,所以是向上取整Math.ceiil(11.3)为12,Math.ceil(-11.3)为-11
floor:意味地板,所以是向下取整,Math.floor(11.3)为11,Math.floor(-11.3)为-12
round:表示四舍五入,算法为Math.floor(x+0.5),即将原来的数字加上0.5再向下取整,所以Math.round(11.5)为12,Math.tound(-11.5)为-11
作用域 | 当前类 | 同包 | 子孙类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
private | √ | x | x | x |
protected | √ | √ | √ | x |
friendly | √ | √ | x | x |
表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)
表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种变现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。
构造器Constructor不能被继承,因此不能重写override,但可以被重载overload。
本文地址:https://blog.csdn.net/weixin_42507474/article/details/107678569
如对本文有疑问, 点击进行留言回复!!
idea ssm项目java程序向串口发送指令并且使用十六进制 rxtx包的方法
网友评论