数组
- 定义数组的语法格式
数组元素类型[] 数组型变量名 或 数组元素类型 数组型变量名[] - 一位数组
一个数组可以包含多个元素,所含的元素数目被称为数组的长度,数组中也可以没有任何元素,此时称为空数组。因此,在创建数组的时候,需要给出组成数组的元素数目。(Java中的数组只能分配动态存储空间,一旦被创建,无法改变其数组长度。如果要在程序运行的过程中扩展数组的长度,就应该使用数组列表。)
一位数组创建的语法格式(举个栗子):
intArray = new int【100】
或 char[] name = new char[300] - 二维数组
定义:
数组元素类型[][] 数组型变量名
或 数组元素类型 数组型变量名[][]
或 数组元素类型[] 数组型变量名[]
创建:
new 数组元素类型[行数][列数];intArray = new int[10][5];
或 int[][] intArray = new int[][];
String类
- String不属于8中基本数据类型
- 定义String类对象之后,没有引用任何一个字符串,就应该赋予null
- new String()和new String(“”)都是申明一个新的空字符串,是空串不是null
- 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
例题:
设有以下代码:
String s1 = "123";
String s2 = "123";
String s3 = new String("123");
则表达式s1==s2和s1 == s3 的值分别是(**true**)(**false**)
解释:s1和s2中的”123”都是字符串常量,它们在编译期就被确定了,是常量池中“123”的一个引用
用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。
类与对象
- 类与对象的区别
对象是客观世界存在的具体实体,具有明确定义的状态和行为。
类是一组具有共同特性的所有对象成员的集合,它是一个抽象的概念 - 类的声明
1.[修饰符]class 类名
2.访问控制符,抽象类控制符,最终类说明符
public:后续定义的任何类均可访问
private:仅能被类自身的内部函数成员函数访问,其它任何类都不能直接访问
protected:同private,但能被继承类受保护的成员访问,不能被私有成员访问。
abstract不仅用于类的声明,也适用于对象。当用于类的声明时,该类不能创建对象。
final 适用于类的声明,变量或者方法。当用于类的声明时,该类不能有子类。
- 类中的成员方法
类中的成员方法主要承担对象的外部接口任务。
成员方法的重载,是指在同一个类中,同一个名称的成员方法被多次定义的现象
public void setTime(int h,int m ,int s){
hour = (h<0)?0 : h % 24;
minute = (m<0)?0 : m % 60;
second = (s<0)?0 : s % 60;
}
public void setTime(String time){
hour = Intrger.praseInt(time.substring(0,1));
hour = (h<0)?0 : h % 24;
minute = Intrger.praseInt(time.substring(3,4));
minute = (m<0)?0 : m % 60;
second = Intrger.praseInt(time.substring(6,7));
}
构造方法:构造类对象的时候使用的成员方法,主要作用是初始化成员变量,因此不需要返回任何值。Java中规定,构造方法不允许返回任何值。构造方法可以重载。构造方法的具体定义格式为: [修饰符] 类名(参数列表)
子类构造方法的定义与执行:
在Java程序中,子类不负责调用父类中带参数的构造方法。在创建子类对象的时候需要在构造方法中利用super()调用弗雷德构造方法,以便能够对从父类继承过来的成员变量初始化。
父类:
public class Shape{
public Shape (int color,int height){
this.color = color;
}
}
子类:
public class Rectangle extends Shape{
public Rectangle(int color,int height,int width){
super(color,height);
this.width = width;
}
}
-
类的静态成员
在类中定义成员变量是,如果在访问特性修饰符之后加上static修饰符就成为静态变量。例如:
public static int staticMember;
静态成员变量只在加载类时创建一个副本,无论将来创建同一个类的多少个对象都将共享同一个副本。因此,静态成员变量与类共存亡,而与具体的对象无关(因此,称之为类变量)。静态成员方法:在外部调用静态方法是,可使用“类名.方法名”的形式,也可以使用“对象名.方法名的形式。而实例化方法就只有后面这种形式。调用静态方法可以无需创建对象;静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法)不能访问非静态的成员变量。
继承与多态
类成员方法的重载与覆盖
成员方法的重载:指在子类中定义与父类中同名的成员方法,但参数列表不同,在子类与父类之间重载成员方法,或者在一个类中定义多个同名的成员方法,但他们的参数列表不同,在一个类中重载成员方法。
成员方法的覆盖
子类通过方法的覆盖可以隐藏继承的方法,方法覆盖是指子类中定义一个方法,并且这个方法的名字,返回类型,参数列表与从父类继承的方法完全相同。
注意:
1.子类的方法不能缩小父类方法的访问权限
2.子类的方法不能抛出比父类更多的异常
3.父类的静态方法不能被子类覆盖为非静态方法
4.父类的私有方法不能被子类覆盖
多态性的实现
在Java中,多态性是指不同的类对象调用同一个签名的成员方法是将执行不同代码段的现象。
具体实现方式:首先,在子类中覆盖父类的某个成员方法,然后,定义父类的对象引用,并由他引用创建的子类对象。当在调用成员方法时,根据实际引用的对象类型最终调用哪个方法。
实现动态行需要具备的两个条件:
多态性作用于子类对象,它是依赖于类层次结构中的一项功能。
具有多态性的成员方法必须同时包含在父类与子类中,且对应的成员方法签名完全一致,即子类覆盖父类的成员方法。
抽象类
在Java语言中,用抽象类表示概念性的事物,用类表示可实例化的实体类别。
定义格式: [修饰符] abstract class 抽象类名……{}
抽象类体中的成员方法既可以是抽象方法(不完整的成员方法,只能在不能被实例化的抽象类中出现),也可以是普通的成员方法。
注意:
抽象类主要用于派生子类,且在子类中实现抽象类中的所有抽象方法。如果在 子类中没有实现全部的抽象方法,则必须继续将没有被实现的方法声明称抽象方法,此时的子类仍然需要声明为抽象类。
static、private、final修饰符不能用于修饰抽象方法。