今天就总结理清一下关于Java面向对象和面向过程的程序设计的一些不同特点。
数组固定长度,无法改变
数组插入删除比较麻烦,需要移动其它元素。 随机读取比较快速,高效
定义:(多维的话类型,将[]变为[][])
例子:
数组复制:System.arraycopy(原数组,复制开始索引,目标数组,目标开始索引,长度) 数组排序:java.util.Arrays.sort(数组);
对象数组:数组是引用类型 ,就是除了数据类型改变了,这里是类对象,之前是数据类型,其它没有任何区别
Arraylist与数组
IndexOutOfBoundsException
- if the index
argument is negative or not less than the length of this string. static字面意思是静态;但是在Java程序中,它是一个标志,作用是将 实例成员 变为类成员。而且只能修饰在类里定义的成员部分,包括成员变量、方法,内部类、初始化块。不用static去修饰类里的这些成员,它们就属于该类的实例。
eg:static int num2 = 20;(这是一个类变量)
eg: int num1 = 238;(实例变量)
static修饰的成员属于类,类变量会随着类初始化得到初始化;而没有static修饰的成员变量则属于实例,实例变量随着对象的初始化而初始化。因为在初始化之前一个对象之前,肯定得先初始化该对象所属的类,所以static修饰的时机肯定较实例变量早。
static方法一般称作静态方法,不依赖任何对象就可以进行访问,因此对于静态方法来说,没有this的。
使用{}——可以分为普通代码块(写在方法里)、构造块(写在类里面)、静态块(用static定义的代码块)-作用可以为static属性初始化和同步代码块(等待多线程时候)
//卸载方法里 public static void main(String args[]){ { System.out.println(); } } //代码写在类里。构造块 class test{ { System.out.println(); } } //静态块,运行时候会优先调用。而且之调用一次,若主函数里面用了两次new test ,下面的2也只是第一次输出 class test{ static{ System.out.println("2"); } }
简单讲就是类中再定义类。 可以在类内的任意位置(代码块或者是普通方法中) 下面的例子可以看出内部类就是可以帮助主函数轻松访问其他类的私有属性。但是其破坏了类的结构性。开发中也不优先考虑。而且外部类也可以轻松访问内部类的私有,也是直接new实例化内部类
class outer{//外部类 private String msg = "waibulei"; class inner{ //内部类 public void print(){ System.out.println(msg); } } public void fun(){ new inner().print();//实例化内部类对象,调用print方法 } } public class test{ public static void main(String args[]){ outer out = new outer();//实例化外部类对象 out.fun();//调用外部类方法 } } //这个代码是一层套一层
在主函数中实例化内部类的格式——outer.inner in = new outer.inner();
若在inner前面加上private,则该内部类只能服务于外部类。
链表逻辑简单、比较实用,几乎被所有程序设计语言支持。是一种根据元素节点逻辑关系排列起来的数据结构。
链表也分单向和双向(一个数据域,两个指针域-指向后继,指向前驱,在最后指向表头结点),还有循环链表(和单链表基本相同,但是最后一个结点的指针域不空,指向表头结点)。
node类有两个属性:(数据)data和(下一节点)next(指明自己有什么,还提醒下一个在哪,看起来是非常友好的结构。)——单向的
动态的对象数组,优势在与没有长度限制。