Java对象和Java对象引用
Java对象:在Java中万物皆对象,对象是客观存在的事物,任何客观存在的事物在Java中都可以作为对象。
Java对象引用:在Java中,实际上并没有对象变量这种东西,只有对象到对象的变量。对象的引用变量保存的是存取对象的方法。它并不是对象的容器,而是类似指向对象的指针。或者可以说是地址。但在Java中我们不会也不知道引用变量中实际装载的是什么,它只是用来代表单一的对象。只有Java虚拟机才知道如何使用引用来取得该对象。
Java引用和C++指针的区别:
1.Java引用的地址值是字符串,指针的地址值是int类型
2.引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指向那里,对程序来说还都是一个地址,但可能所指的地址不是程序想要的。
3.Java对象引用并不能被直接操作,指针p++,p–,这样的操作在Java中是不可能见到的,同样Java也不能获取引用指向的地址。
对象作为参数传递的特点
基本数据类型作为参数传递是值传递,而对象是引用传递
public class ValuePass {
private static int a;
public static void main(String [] args) {
modify(a);
System.out.println(a);
}
public static void modify(int a) {
a++;
}
}
本程序的输出为0,因为a++是对形式参数进行自增,而不是类属性a进行自增
Java对象初始化顺序
类的static字段与非static字段的区别
static修饰符修饰的域变量不属于任何一个类的具体对象,被保存在类的内存区的公共存储单位中。
区别:
**1.**static方法是类的方法,但可以被所有的对象访问。
**2.**static方法内部的代码,只能访问类中的static属性或方法;但是非static方法
(即对象方法)可以访问static属性或方法。
使用场景:
当对象中出现共享数据时,就应该使用static修饰。
举例:
class StaticCodeBlock{
static int value;
static {
value=3;
System.out.println("value="+value);
}
public static void main(String []args){
}
}
其中,static静态代码块起赋予初始值的作用
Java中final修饰符的作用
1.修饰数据
final修饰的数据是常量
举例:
public class Student{
int sex;
public final static int MALE = 0;
public final static int FEMALE = 1;
}
2.修饰方法
final修饰的方法是最终方法,不能被覆盖(即不能在子类内部重写该方法)
3.修饰类
final修饰的类称作最终类,该类不能有子类
Java中数组的声明格式
1. 类型标识符 数组名[];(合法但不推荐)
2. 类型标识符 [] 数组名;(《java开发手册》强制)
举例:
int [] arr;
String [] example;
MyClass [] mc;
//此时仅声明了引用变量,并未产生数组对象
注意声明时不可在方括号内指定数组大小
如float [10] arr; 是错误的
Java数组元素类型为基本类型和引用类型时的不同
1.基本类型:
举例:
int [] arr = new int [10];
//在堆上为数组对象分配10个整形元素空间,每个元素初始化默认值为0;
1
2
2.引用类型:
举例:
String [] example = new String [10];//对象引用数组
//产生一个具有10个单元的数组对象,每个单元存放的是1个String对象的引用,所有单元的初始值为默认值null,此时并未创建具体的String对象
//程序验证:
for (String x: example)
System.out.println(x);//输出结果为10个null
//抛出NullPointerException异常
System.out.println(example[0].length());
//修改:example[0] = new String("ab");//创建String对象,赋值给example[0], 此时example的第一个元素指向String对象,从而可以操纵String对象