「javafinal数组」java集合数组
本篇文章给大家谈谈javafinal数组,以及java集合数组对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Java数组创建和初始化
- 2、java final修饰引用类型变量,,比如一个数组a,,既然a里的元素都可以重新赋值了
- 3、Java中final 一般是什么作用,什么情况用
- 4、java final 数组 线程安全吗
- 5、Java中final有什么用?
- 6、疑问:java中的final永远不能修饰对象的实际内容??
Java数组创建和初始化
有什么问题?
创建数组
String[] a = new String[3];
String[] a = new String[]{"a","b"};
就是象定义变量那个..只是在类形后面加个[] 初始化
第一种.写法.如果是数值形.默认值是0;如果是字符串.或者对象类型就是NULL;
第二种.写法.创建时直接初始化.
要注意..第一种写法的3就是数据长度那里.如果你没有给数组元素赋值的化必须有.如果象第二种.有赋值的话就可以把3省掉.
java final修饰引用类型变量,,比如一个数组a,,既然a里的元素都可以重新赋值了
java的final用来修饰变量时,他的含义是这个变量的引用不能被重新赋值.
例如
final int[] arr = {1,2,3};
arr[0] = 4;//ok,允许
arr = {2,3};//不允许的操作
这样可以看出来,final是限定arr这个变量,他指向(代表)的是哪一个对象
他不能指向另一个对象,但是对象本身的修改不受限制.
实际上,被final修饰的变量就不能叫"变量"了,因为它不能被重新赋值.
仅此而已.
Java中final 一般是什么作用,什么情况用
1. 修饰基础数据成员的final
这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰为常量,意味着不可修改。如java.lang.Math类中的PI和E是final成员,其值为3.141592653589793
和2.718281828459045。
2. 修饰类或对象的引用的final
在Java中,我们无法让对象被修饰为final,而只能修饰对象的引用,这意味着即使你写public final A a = new A(); 事实上a指向的对象的数据依然可以被修改,不能修改的是a本身的引用值,即你不能再对a进行重赋值。同样的情况出现在数组中,比如public final int[] a = {1, 2, 3, 4, 5},事实上a中的数值是可修改的,即可以写a[0] = 3。据目前了解,java中数组内的数据是无法修饰为不可修改的,而C/C++可以。
3. 修饰方法的final
修饰方法的final和C/C++中修饰成员对象的const大不相同。首先,修饰方法的final含义不是“不可修改”,而是指该方法不可被继承成员重新定义。(注意,这里所说的不能被重新定义,并不是指子类一定不能定义同名方法,如果父类的方法是私有类型,子类是允许定义该方法的,这里指的不能重新定义是指不能通过改写方法来使得方法重写的多态性得以实现,如不希望A a = new B(); a.f();这样的重写方法情况出现)
示例:
public class A {
// final方法f
public final void f() {
System.out.println("类A中的final方法f被调用了");
}
}
public class B extends A {
// 编译错误!父类的f方法是final类型,不可重写!
//! public void f() {
//! System.out.println("类B中的方法f被调用了");
//! }
}
java final 数组 线程安全吗
final修饰的引用不可以指向其他的内存,但是其值是可以变得。这句话该怎么理解呢,比如:
final ListString l = new ArrayList();
l = new ArrayList();//错误,不可以指向别的内存。
l.get(0) = "asdf";//正确,因为没有改变其指向
那么线程安全该怎么理解?
线程安全就是多线程并发访问一个数据的时候,对这个数据进行保护,同一时间只允许一个线程访问这个数据。final很明显并没有对此有什么限制。
根据以上可以得出啥结论呢,final修饰的对象本身安全,因为没办法再次更改他的指向了,也就不存在并发写入一个数据的问题了。但是类似于Collection这类可以改变自己元素值得对象来说,还是不安全的。
Java中final有什么用?
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
疑问:java中的final永远不能修饰对象的实际内容??
final 修饰符分两种情况:
如果是修饰基本类型,如果整形,浮点型,如 final int i=100,这里的i的值是不能变的
如果修饰的是对象,如final String s = "dddd";,这里的引用是不能变的,比如你不能这样写:
s = "bbbbb";
在java里面,数组是被看做是一个对象的,所以这个final不能阻止通过数组下标来访问对象进行值的改变。
就你上面提出的问题,可以封装如下的类:
class MyArray{
//这个就是不能改变的数组,请按照实际情况修改
private final String[] array = new String[]{"aaaa","bbbb","cccc"};
//模拟数组下标访问,从0开始
public String get(int size){
if(size array.length -1){
//这里数组越界了,返回null ,具体你可以抛出异常
return null;
}
return array[size];
}
}
javafinal数组的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java集合数组、javafinal数组的信息别忘了在本站进行查找喔。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。