对象:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和操作组成。
类:是同种对象的集合与抽象
object oriented programming OOP procedure oriented programming POP
局部变量必须先赋值再使用,否则会出现编译错误
当一个实例对象被创建时,若没有初始化,系统会对其中各种类型的成员变量自动进行初始化赋值。
局部变量如果没有初试化,系统不会给他初始化;堆对象如果没有人为的给他初始化,系统会给他初始化;
常量-final关键字: 和C++const一样作用,不过java定义可以在任何地方初始化
final int aFinalVar=0; == final int aFinalVar; aFinalVar=0;
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
|
被同时声明为static和final的变量又称为命名常量(Named Constant),用于表示那些在类的使用范围内有意义的常数或不变对象,命名常量的变量名通常都是大写字母,单词之间用下划线“_”连接
final变量如果是对象引用(object reference),则该引用本书无法被再次赋值,但是仍然可以通过该变量去改变所引用对象的状态
|
成员变量的隐藏性(局部变量没有):
局部变量与成员变量名字相同时,则成员变量将被隐藏,即在这个方法内暂时失效,只有局部变量起作用
static关键字修饰成员变量(变量放在栈上,存放在方法区):使用static关键字后,该变量成为静态成员变量或称类成员,在内存中只有一份,为该类所有实例对象共享,任何实例访问它将得到同一个值;访问方式 类.静态变量 实例对象.静态变量(不推荐)
Access Control (域的访问控制):
public — 共有的,域在任何地方都可以访问。
protected — 受保护的,仅在类体中、子类类体中或同包的其它类类体中可访问。即:在类中被申明为保护的域可以被同一个包中的该类的对象访问。也能被其子类访问,而不管它们是否在同一个包中 。
private — 私有的,域仅在类体中可访问。只有同一类中创建的对象才能访问私有域。在其他类中创建的对象不能访问私有域。
(不写)— 默认的package,没有任何访问修饰符修饰的域,仅在类体中、同包的其它类类体中可访问。
|
是否可以访问 | public | protected | private | 缺省(package) |
该类内部 | √ | √ | √ | √ |
同一个包的子类 | √ | √ | × | √ |
不同包的子类 | √ | √ | × | × |
同一个包的非子类 | √ | √ | × | √ |
不同包的非子类 | √ | × | × | × |
注意:java中new申请出来的变量都是存在堆上的,当函数传参的时候不要和C++混淆,都是传的地址;(和C++大不同)
private static void func(Demo d1,Demo d2){
int a;
a=d1.a;
d1.a=d2.a;
d2.a=a;
} //d1,d2拿到原本在堆上的地址,交换是通过地址交换的,改变了堆上的值
public static void swap(int x,int y){
int temp=x;
x=y;
y=temp;
} //同上
|
private static void func2(Demo d1,Demo d2){
Demo temp;
temp=d1;
d1=d2;
d2=temp;
} //栈上的d1,d2的地址交换了,仅仅指向交换了,原本堆上的值没有变
public static void swap2(int[] array){
int temp=array[0];
array[0]=array[4];
array[4]=temp;
} //拿到堆上数组地址首地址,array[0]和array[4]交换实际上是用地址交换了,改变了值
|
Java Package的作用是什么: 程序要引用一个类,必须在开头import引入包名和带上类名 import.包名.类名; ;如果一个类没有在类里最开头写明 package.包名; ,那么其他包的类就没办法引用该类;如果不建包,直接在项目里写类,默认是在 import java.util.类名; 这个系统包里;