Int short long byte char float double boolean
基本类型传参数只传递数值,引用类型传参传得是内存地址
static修饰符
静态变量:
static关键字用来声明独立于对象的静态变量,无论一个类实例化多少个对象,它的静态变量只有一份拷贝。静态变量也被称为类变量,局部变量不能被声明为Static变量。
静态方法:
static关键字用来声明独立于对象的静态方法,静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
final类不能被继承,final方法可以被继承但不能被重写,声明final主要是防止此方法被内容修改且防止冗余。
在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的步骤:
1.修改属性的可见性来限制对属性的访问(一般限制为private)
2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作
多态的实现方式
方式一:重写
方式二:接口
方式三:抽象类和抽象方法
子类拥有父类非private的属性,方法。
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。
Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类。
1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
如果一个类包含抽象方法,那么该类必须是抽象类。
任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
普通类可以去实例化调用;抽象类不能被实例化,因为它是存在于一种概念而并非具体。
普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非自类也是抽象类。
普通类中不能有抽象方法,抽象类中可以有抽象方法也可以有非抽象方法。
接口中只能有抽象方法,抽象类中可以有抽象方法也可以有非抽象方法。
普通类一次只能继承一个抽象类,普通类一次可以实现多个接口。
抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
抽象类可以有具体的方法和属性。接口只能有抽象方法和不可变常量。
抽象类主要是抽象类别,接口主要是来抽象功能。
default(即默认,什么也不写):在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private:在同一类内可见,使用对象:变量、方法。注意不能修饰类(外部类)
public:对所有类可见。使用对象:类、接口、变量、方法
procteted:对同一包内的类和所有子类可见。使用对象:变量、方法。注意:不能修饰类。(外部类)。
1)数组在内存中连续;
使用数组之前,必须事先固定数组长度,不支持动态改变数组大小;
数组增删时需要移动其它元素
链表采用动态内存分配的方式,在内存中不连续
支持动态增加或者删除元素
数组在内存中顺序存储,可通过下标访问,访问效率高
数组的大小是固定的,所以存在访问索引越界的风险
链表访问效率低,如果想要访问某个元素,需要从头遍历
二者实现结构不同arraylist是基于数组,linkedlist是基于链表,他们的特性也是由其数据结构决定的。
随机遍历访问时linkedlist的性能要低于arraylist.
arraylist的初始化时默认10容量,而linkedlist默认初始化为空。
linkedlist的增删要优于arraylist
只要可以申请得到链表空间,链表就无越界风险
public static void main(String[] args) { List ls = new ArrayList(); ls.get(0); }
如上代码运行肯定是会报错的,java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
List是数组或链表,具有有序性不具有唯一性
Set是,具有唯一性不具有有序性
Add,size,remove,get,contains,isEmpty indexOf
Add,size,remove,isEmpty
public class Test implements Comparable<Test>{ public int age; public void setAge(int age){ this.age = age; } public int getAge(){ return age; } public int compareTo(Test o){ return this.age-o.age;} }
数组+链表+红黑树
第一种方法
List.remove(2)
第二种方法
List.remove(list.get(2))
public int isExist(List<Person> persons,String name){ for(int i = 0; i < persons.size; i++ ){ if(persons.get(i).getName().equals(name)){ return i } } return -1; }