JavaSE day5:
一、数组(续)
1、多维数组(了解)
java中多维数组的元素是(数组)引用数据类型,故可以有阶梯状的数组,即同级数组的元素个数可以不同
二、类和对象
1、问题:
什么是类? (如:自行车的设计图)
什么是对象? (如:一辆辆的自行车)
为什么要设计类和对象的机制? (面向对象编程)
状态 + 行为
属性 方法
2、面向对象的三大特性 -- 封装性,继承性,多态性
1)封装性:所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。简而言之就是,内部操作对外部而言不可见(保护性)
2)继承性:继承是指这样⼀种能力:它可以使⽤现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
3)多态性:所谓多态就是指⼀个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。
面向对象名词扩展:OOA - 面向对象分析;OOD - 面向对象设计;OOP - 面向对象编程
3、语法
1)定义类的语法
修饰符(modifier) class 类名称 {
1、属性(可有可无)
2、方法(可有可无)
3、构造方法(如果没有定义构造方法,系统会自动生成一个无参构造)允许重载
}
Eg:public class HelloWorld { ...}
1>如何定义属性
修饰符 变量类型 变量名称;
默认值:
2>如何定义方法
修饰符 返回值类型 方法名称(形参列表) {
实现
}
Eg:public static rotate(int[] a,int k) { ...}
3>如何定义构造方法(如果没有明确写出,系统会自动补充一个无参构造方法;有则不补)
修饰符 类名称(形参列表) {
}
2)构造对象的语法 | 对象实例化的语法
create object | instance(动词)
类名称 变量名称 = new 类名称(实参列表)
引用类型 - 类引用
只要出现了关键字new就开辟了内存
一个文件中只能有一个public的类,该类的名称必须和文件名一致
一个类会生成一个 .class 字节码文件
对象中存储的主要是属性,也可以找到方法区中对象对应的类
对象(引用数据类型)必须在实例化后调用,否则会产生NullPointerException(运行时报错),编译时不会出错
Eg:Person p = null;
//定义了一个没有指向任何对象的Person类型的引用(类类型的引用)
Person p = new Person(...);
//定义了一个Person类型的对象
//定义了一个指向Person类型的对象的Person类型的引用(类类型的引用)
垃圾空间:没有任何栈内存指向的堆内存空间
由于匿名对象不会有任何的栈空间所指向,所以使用⼀次后就成为垃圾空间。
4、实例化对象的过程
1)new 关键字 计算对象需要的内存大小,开辟空间,初始化为0x0
p = malloc(sizeof(Person));
memset(p,0x0,sizeof(Person));
2)调用构造方法,对属性初始化
3)构造方法调用结束,返回一个指向新对象的引用
Person tmp = 新的对象;
5、如何访问对象的属性(内部 | 外部)
如何调用对象的方法(内部 | 外部)
1)内部(在类的方法中访问类的属性和调用类的方法)
属性:直接通过属性名称访问即可(出现命名遮挡时用this.属性名)
方法:直接通过过方法名称调用即可
2)外部(在其他类的方法中访问该类的属性和调用该类的方法)
属性:对象的引用.属性名称
方法:对象的引用.方法名称(实参列表)
6、其他(注意区分两种调用)
1)嵌套调用
System.out.println(Arrays.toString(rotate(new int[]{1,2,3,4,5},3)));
分解如下:
int[] tmp1 = new int[]{1,2,3,4,5};
int[] tmp2 = rotate(tmp1,3);
String tmp3 = Arrays.toString(tmp2);
System.out.println(tmp3);
2)链式调用(暂时不能有一个很好的实例)
7、this关键字的使用
1)在构造方法中调用其他构造方法,调用语句必须出现在第一行(形如:this(参数))
2)通过this访问属性或方法(一般出现在发生了命名遮挡的时候)(this.方法名称(参数))
3)this代表的就是当前对象的引用(current object)
普通属性和普通方法,其实都绑定着一个隐含的对象
标准输入 stdin 键盘
标准输出 stdout 屏幕
标准错误 stderr 屏幕