Java数组与c语言,c++的数组还是有一些区别的。
1.Java数组的声明与创建1.声明数组
声明数组包括数组的名字、数组包含的元素的数据类型。
声明一维数组有下列两种格式:
数组元素类型 数组名[] ;
数组元素类型[]数组名;
声明二维数组有下列两种格式:
数组元素类型 数组名 [ ][ ];数组元素类型 数组名;
例如:
float boy [ ] ;
float a [ ] ;
double gir [ ][ ];
double b [ ];
数组 boy 的元素可以存放 float 类型数据。
数组的元素的类型可以是 Java 语言的任何一种类型。假如已经定义了一个 People 类型数
据,那么可以声明一个数组:
People china [ ];
则数组 china 的元素是 People 类型的数据。
2.创建数组
为数组分配内存空间的格式如下:
数组名字= new 数组元素的类型[数组元素的个数];
boy = new float [4];
创建数组后,系统会给每个数组元素一个默认的值,如 float 类型是0.0。在声明数组的同时可以给数组的元素一个初始值,如
float [] boy ={21.3f,23.89f,2.0f,23f,778.98f};
语句相当于
float [] boy = new float [5];
boy [0]=21.3f; boy [1]=23.89f; boy [2]-2.0f; boy [3]=23f;
数组 [n] 注意n代表的是个数,数组都是从0开始计算的,如0~n-1。
如果有一个数组a[2];那么a[2]=1;(这里是错的)
4.Arrays类在java.util中有一个Arrays类,此类包含用于操纵数组的各种方法,例如:二分查找(binarySearch)、拷贝操作(copyOf)、比较(equals)、填充(fill)、排序(sort)等,功能十分强大。
5.冒泡排序
- 打印数组元素 Arrays.toString()
- 对数组进行升序排序 Arrays.sort()
- 对数组进行填充 Arrays.fill(a,2,4,0) 意思是:下标为2和下标为4之间的元素被2填充,即用2对对应元素进行替换
6.稀疏矩阵比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
五、面向对象 1.类与对象的创建
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方式是:
记录数组一共有几行几列,有多少个不同值把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
1.类的创建
类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
class 类名称 {
属性 (变量) ;
行为 (方法) ;
}
2.对象的创建
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。
类名称 对象名称 = new 类名称 () ;2.构造器
构造器通常也叫构造方法、构造函数,构造器在每个项目中几乎无处不在。当你new一个对象时,就会调用构造器。
(修饰符) 类名 (参数列表,可以没有参数){
}
3.封装构造器需要满足以下三个条件:
- 方法名与类名相同
- 在方法名前面没有返回值类型的声明
- 在方法中不能使用return语句返回一个值,但是可以单独写return语句来作为方法的结束
封装:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。
封装步骤
第一步:属性私有
第二步:get/set(读/写)
第三步:get/set语法格式
[修饰符列表(无static)] 返回值类型 get属性名(驼峰原则)(){
return 属性名;
}
public int getAge(){
return age;
}
[修饰符列表(无static)] void set属性名(驼峰原则)(){
方法体;
}
public void setAge(int age){
this.age = age;
}
4.继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
class 父类{
... //成员变量、成员方法
}
class 子类 extends 父类{
... //类体
}
5.super
表示通过子类的构造方法调用父类的构造方法。
6.方法的重写
- super.属性名 【访问父类的属性】
- super.方法名(实参) 【访问父类的方法】
- super(实参) 【调用父类的构造方法】
在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
1.子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
2.子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
3.子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
4.子类不能重写父类中声明为private权限的方法
5.子类方法抛出的异常不能大于父类被重写方法的异常
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
注意:
1. 多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
2. 多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
3. 多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
4. 多态情况下,不能访问子类特有的成员。
9.static关键字关键字是判断instanceof左边的对象是否属于右边的类型(用于引用类型的判断结果为true或false)
就是全局变量。
10.抽象类1、被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。
2、在该类被第一次加载的时候,就会去加载被static修饰的部分,而且只在类第一次使用时加载并进行初始化,注意这是第一次用就要初始化,后面根据需要是可以再次赋值的。
3、static变量值在类加载的时候分配空间,以后创建类对象的时候不会重新分配。赋值的话,是可以任意赋值的!
4、被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。
抽象方法只能定义在抽象类中,抽象的方法和抽象的类必须由关键字abstract修饰。
抽象类值只定义方法声明,不定义功能主题(即方法的实现)。
抽象类不可以被创建对象。
抽象类只有子类继承了父类中的方法,并且对其中的所有抽象方法进行了重写。该子类才不是抽象类,只要不是重写当中的所有抽象方法,那么这个子类还是抽象类。
注意
11.接口与定义的实现抽象类中是否有构造函数?有,用于给子类对象进行初始化。
抽象类中是否可以定义非抽象方法?可以
抽象关键字abstract和哪些不可以共存?final , private , static
抽象类中可不可以不定义抽象方法?可以。抽象方法目的仅仅为了不让该类创建对象。
Java 不支持多继承性,即一个类只能有一个父类。单继承性使得 Java 简单、易于管理程
序。为了克服单继承的缺点, Java 使用了接口,一个类可以实现多个接口。
关键字 interface 定义接口。接口的定义与类的定义相似,分为接口的声明和接口体。
1,接口的声明和使用
我们曾使用关键字 class 来声明类,接口通过关键字 interface 来声明,格式如下:
(1)接口声明
interface 接口的名字
接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不允许提供方
(2)接口体
法的实现,所以方法的定义没有方法体。例如:
interface Printablef {
final int MAX =100;
void add ();
float sum ( float x , float y );
}
一个类通过使用关键字 implements 声明自己实现一个或多个接口。如果实现多个接口,
(3)接口的使用
用逗号隔开接口名,如
class A implements Printable , Addable
类 A 使用接口 Printable 和接口 Addable ,而
class Dog extends Animal implements Eatable , Sleepable
类 Dog 实现接口 Eatable 和接口 Sleepable 。
12.内部类内部类(nested classes),面向对象程序设计中,可以在一个类的内部定义另一个类。
嵌套类分为两种,即静态嵌套类和非静态嵌套类。静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner)。
内部类是JAVA语言的主要附加部分。内部类几乎可以处于一个类内部任何位置,可以与实例变量处于同一级,或处于方法之内,甚至是一个表达式的一部分。
内部类分类
一、成员内部类
二、局部内部类
三、匿名内部类
六、异常 1.Error与Exception
Error:程序无法处理的系统错误,编译器不做检查;
Exception:程序可以处理的异常,捕获后可能恢复;
2.抛出和捕获异常(1)Error类和Exception类都是继承Throwable类
(2)Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
(3)Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
抛出异常:如果程序中出现了异常,没有办法将具体的异常打印出来,不做任何处理
捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的Log
如果异常出现的话,会立刻终止程序,所以我们得处理异常:
1. 该方法不处理,而是声明抛出,由该方法的调用者来处理(throws)。
2. 在方法中使用try-catch的语句块来处理异常。
异常处理五个关键字:try、catch、finally、throw、throws
3.自定义异常自定义异常类:当Java提供的异常类,不够使用时,需要自己定义一些异常类。
格式:
public class XXXException extends Exception 或者 RuntimeException{ 添加一个空参数的构造方法 添加一个带异常信息的构造方法 } 注意:
1.自定义异常类一般都是以Exception结尾,说明该类是一个异常类
2.自定义异常类,必须继承 Exception (编译异常)或者 RuntimeException(运行异常)--异常指程序执行期非正常执行导致程序终止
继承 Exception (编译异常):那么自定义的异常类就是一个编译器异常,如果方法内部抛出了编译器异常,就必须处理这个异常,要么throws,要么try-catch
继承RuntimeException(运行异常:那么自定义的异常类就是一个运行期异常,无需处理,交给JVM处理。



