您的位置:首页 > 编程语言 > Java开发

java基础学习的一些笔记

2015-03-27 20:23 239 查看
//饿汉式,不存在线程安全问题

class Single{

private static Single s= new Single();

private Single (){}

private static Single getInterface(){

return s;

}

}

//懒汉式 :延迟单例的加载例子,存在多线程安全问题,可以同步函数或同步代码,

//若同步函数每次进来都要判断,浪费时间。所以选择同步代码。例子如下:

class Single{

private static Single s= null;

private Single (){}

private static Single getInterface(){

if( s==null )

{synchronized(Single.class){//同步。

if( s==null ){

s=new Single();

}

}

}

return s;

}

}

类:对现实生活中事物的描述;(可以继承另外一个类同时实现多个接口)

对象:就是这类事物,实实在在存在的个体,

三种引用类型:数组类型,类类型,...

匿名对象(例:new Person()):对对象只调用一次时,可用匿名对象完成。也可作实际参数

构造函数作用:可以给对象进行初始化

构造代码块:构造代码块优先于构造函数执行

this: 代表本类的对象,

构造函数之间的调用的方式:只能用this语句 如this(参数)。(注:只能放在构造函数的第一行) ;

继承(子类继承了父类的东西,也可以调用,复写里面的成员):提高了代码的重用性,让类与类之间产生了关系,有了这个关系才有多态的特性。子类对象可以调用父类的方法。

java;只能单继承,不支持多继承。支持多层继承(例,B继承A,C继承B)。

子父类中的函数:子类出现和父类中的函数一样时,当被子类对象调用时,执行的是子类函数的内容。

覆盖(重写): 子类覆盖父类,必须保证子类权限大于等于父类的权限。子父类函数(名字,权限等)要一摸一样

重载:函数的参数列表不一样。

super语句 : 一定要放在子类构造函数的第一行(因为初始化动作先做,要放在第一行)

注意(子类的实例化过程):子类的所有的构造函数默认都会访问父类中空参数的构造函数。

因为子类每一个构造函数内的第一行都有一句隐式super();

子类中至少有一个构造函数会访问父类中的构造函数。

final: (可以修饰类,函数,变量)修饰的类不可以被继承(避免类,成员,被子类复写)。

可用final定义成常量。(全局变量形式:public static final)

抽象类((abstract)即类中,没有实现其中方法的内容,即要描述的内容不一定,不同,此时可定义成抽象): 不能用new创建对象,因为调用没意义。不能实例化。可以没有抽象方法。若其中的方法要被调用,必须由子类复写后创建子类对象调用。

如果子类只复写了部分抽象方法,那么该子类还是一个抽象类。(要复写完所有的抽象方法才行

( abstract class fu{abstract void study();

abstract void study1();

}

class zi extend fu{

void study(){};

void study()1{};

}

若只覆盖了一个(即子类仍是抽象类)则要:

abstract class zi extend fu{

void study(){};

}





abstract : 只能修饰类和方法,不能修饰变量,

模板方法设计模式:

/*

* 获取一段程序运行的时间,等于 结束时间-开始时间

* 获取时间:调用 Systerm.currentTimeMillis();返回毫秒值

*这种方式: 模板方法设计模式

* 模板方法设模式(思想:某个功能中有一部分功能需要子类去实现。但这部分功能不一定是抽象的): 在定义功能时,功能的一部分是确定的,但是一部分是不确定的,而确定的部分在使用不确定的部分,

* 那么这时就将不确定部分暴露出去,有该类的子类的去完成。

*/

如:

abstract class GetTime

{

public final void getTime(){//final 修饰:防止被继承时被复写

long start = System.currentTimeMillis();

run();

long end = System.currentTimeMillis();

System.out.println("所用时间:"+(end-start));

}

public abstract void run();//某段程序,不固定,所以定义成抽象的。

}

class subcode extends GetTime

{

public void run(){

for(int i=0; i<=100; i++ )

{System.out.print(i);}

}

}

public class Main {

public static void main(String[] args) {

subcode sb = new subcode();

sb.getTime();

}

}

接口( interface,相当扩展功能 ):初期理解:可以认为是一个特殊的抽象类。

class 用于定义类,interface 定义接口。

格式特点:

1.接口常见定义: 常量,抽象方法

2.接口中的成员都有固定的修饰符

常量:public static final

方法:public abstract

记住:接口中的成员都是public 的。接口不可以创建对象,因为有抽象方法。

接口可以多实现,多继承。

实现接口(implements + 接口名称)

多态: 可以理解为事物存在的多钟体现形态。

集合框架:

Set集合:

1.HashSet;数据结构是哈希表,线程是非同步的,

保证元素唯一性原理。判断元素的hashCode值是否相同

如果相同,还会继续判断元素的equals方法,是否为true

2.TreeSet:可以对Set集合中的元素进行排序,

底层数据结构是二叉树

保证元素唯一性;

compareTo方法中:

ruturn 0 表示元素相等;ruturn 1 表示前元素大;ruturn -1 表示前元素小

TreeSet的第一种排序方式是,让元素自身具有比较性。

需要实现Conparable接口,覆盖compareTo方法

也称元素的自然顺序,或是默认顺序

记得一定要覆盖compareTo方法。(返回的是int类型的)

TreeSet的第二种排序方式是:

当元素自身不具备比较性时,或者具备的比较性‘不是所需要的,

让容器自身具有比较性。

在集合初始化时,

方法:

定义一个类(如MyCompartor),实现Compartor接口,覆盖compare(obj o1,obj 02)方法(即为比较器)

定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数( new TreeSet( new MyCompartor() ) ),

当两种排序都存在时,以比较器为主

记住:排序时,当主要条件相同时,一定要判断下一次的条件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: