Java学习笔记

一.输入

1.scanner类:

a.导入java.util.Scanner

b.创建Scanner对象

c.接收并保存用户输入的值:

读入字符串:next();

读入小数:nextDouble();

读入整数:nextInt();

eg.

Scanner input = new Scanner(System.in);
int a= input.nextInt();
System.out.println(a);

二.输出

1.System.out.println(count);


三.数组

1.转自慕课网:



四.变量:

1.成员变量有默认初始值。局部变量没有默认初始值。


五.初始化块:

        1.静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量

2.程序运行时静态初始化块最先被执行(由上至下),然后执行普通初始化块(由上至下),最后才执行构造方法。

参考:http://www.cnblogs.com/miniwiki/archive/2011/03/25/1995615.html


六.包:

定义包:packge + 包名(全小写);//必须放在源文件第一行,包名间可以用“.”隔开。


七.内部类:

慕课网-Java第二季-2-7

静态内部类是 static 修饰的内部类,这种内部类的特点是:

1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 

2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

方法内部类:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。


八.访问权限:

参考:http://www.cnblogs.com/xwdreamer/archive/2012/04/06/2434483.html


九.final、super

1.final:

修饰类使该类不能被继承;

修饰变量使该变量变为常量,在定义时必须要赋值,但是在构造函数中可以被修改。

2.super

调用父类的成员或方法。


十.Object

1.toString:默认返回类的地址信息;重写后可以返回类信息。

2.equals:默认判断两个对象的地址是否相同;重写后可以判断其他信息是否相同。

eg: a.equals(b);

3.getClass:返回类的类型,即类的代码信息,包括类名、成员个数等。


十一.强制转换

1.强制将父类转换成子类时:使用instanceof 

eg: 父类 instanceof 子类 (父类能否转换成子类),若父类含有子类的元素则返回true(可以强制转换),否则返回false(不可以强制转换)。


十二.抽象类abstract

1.规则:

a.abstract定义抽象类。

b.abstract定义抽象方法,只有声明,不需要实现。

c.包含抽象方法的类是抽象类。

d.抽象类中可以包含普通方法,也可以没有抽象方法。

e.不能创建抽象类的对象,可以定义抽象类引用指向一个普通类。


十三.接口

1.定义:类是单继承的,接口可以多继承。黄色部分若是没写,编译器会自动添加。

[public] [abstract] interface 接口名 [extends 父接口1,父接口2...]{

//常量及抽象方法定义

public static final int a = 10;

public abstract void f();

}

2.使用:extends 关键字必须在  implements 关键字之前

[修饰符] class 类名 extends 父类 implements 接口1,接口2....{

//如果继承了抽象类,需要实现其中的抽象方法;

//还要实现接口中的抽象方法。

}

3.可以使用匿名内部类来实现接口


十四.异常

1.异常结构


try中写可能抛出异常的代码,catch中写 捕获到异常后的处理方法,finally中的内容,无论是否出现异常都会执行。try块后可以接多个catch块,catch应按照由小范围到大范围的顺序写

eg. Exception e;

e.rintStackTrace();//输出异常类型及位置


十五 字符串

1.相同的字符串常量只有一个对象

eg:

String s1 = "abc";

String s2 = "abc";

return s1 == s2;//返回值是true

2. 一旦一个字符串在内存中创建,则这个字符串将不可改变。当改变时,相当于创建了一个新的字符串,变量将引用新的字符串。如果需要一个可以改变的字符串,我们可以使用StringBuffer或者StringBuilder。StringBuilder 和StringBuffer ,它们基本相似,不同之处在于,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。

3.比较字符串的内容,使用.equals()方法,该方法在String类中被默认重新过了

4.字符串常用方法


十六 包装类

1.包装类主要提供了两大类方法: 将本类型和其他基本类型进行转换的方法; 将字符串和本类型及包装类互相转换的方法。

2.Interger包装类

(1)构造方法:

(2)常用转换方法:

除使用intValue()外,也可以直接使用 int i = n;//n是Integer类对象,此处使用了自动拆箱方式,参考  http://www.imooc.com/code/2250

(3)转为字符串

基本类型转换为字符串有三种方法: 使用包装类的 toString() 方法; 使用String类的 valueOf() 方法; 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串。

eg. int c = 10;

String s1 = Integer.toString(c);

String s2 =String.valueOf(c);

String s3 =c + "";

(4)字符串转基本类型

将字符串转换成基本类型有两种方法: 调用包装类的 parseXxx 静态方法; 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱。

eg. String str = "123";

int a = Integer.parseInt(str);

int b = Integer.valueOf(str);


十六 框架



1.List:元素有序且可重复。ArrayList 的底层由数组实现,向其中插入元素时,指定的位置需要小于等于当前容量,否则会报错。

contains()方法的原理:contains方法会调用list内每个元素的equals()方法与目标进行比较,如果有一个是true,则返回true,否则返回false。

2.可以使用泛型来规定集合中可以放入的对象类型。

eg. List<Integer> a = new List<Integer>(); //即使规定了泛型,也可以向容器中存入泛型的子类,且泛型不可以使用基本类型,但可以使用基本类型的包装类

3.Set:元素无序且不可重复。由于无序,因此与List不同,Set没有get方法。若多次添加同一对象,只会保留第一次添加的那个。Set中可以添加空对象null

4.HashMap:多个KEY可以对应同一个value。Map中使用Entry类型作为键值对

5.使用带有Hash的容器时,在重写equals方法时应该同时重写hashcode方法,可是有IDE默认生成的。

6.使用Collection.sort(arraylist)对arraylist进行排序。对字符串排序时的排列顺序为0-9A-Za-z,若两个字符串第一位相同则比较第二位。

若对自定义的类进行排序,需要让类继承comparable<T>接口并使用泛型,并实现compareTo()方法;或者让类继承comparator<T>接口并使用泛型,并实现compare()方法

comparable接口:定义默认比较规则,实现该接口的类需要实现compareTo(object o)方法,返回正数表示大,返回负数表示小,返回0表示相等。

comparator接口:定义临时比较规则,实现该接口的类需要实现compare(object a,object b)方法,返回正数表示a大于b,返回负数表示a小于b,返回0表示相等

public int compareTo(Poker tempPoker) {
    if (this.bigger(tempPoker)) {
        return -1;
    }
    return 1;
}

由于在使用Collections.sort(listName)方法时,始终按照从小到大的顺序排序,所以当返回值是-1时,会被排在前边,返回值是1时,会被排在后边,返回值是0时尚不清楚规则

eg.  假设A和B是Poker的两个对象,则A.compareTo(B)的值是-1时,代表调用Collections.sort()方法时,A要排在B前边。


此外在使用comparator来实现临时比较规则时,需要定义一个新类实现该接口,然后在排序时调用。

eg. 假设现在要对ArrayList<A> a 进行排序,需要先创建类B应用接口comparator并重写compare方法,然后使用Collections.sort(a,new B());来排序。

类B:

public class ComparatorTest implements Comparator<Factors> {
    @Override
    public int compare(Factors o1, Factors o2) {
        if (o1.getProduct() < o2.getProduct()){
            return -1;
        }else if (o1.getProduct() > o2.getProduct()){
            return 1;
        }
        return 0;
    }
}
测试:

ArrayList<A> a = new ArrayList<A>();
a.add(...);
...
...
Collections.sort(result,new ComparatorTest());







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值