java快速复习2

这里有静态语句块和实例语句块StringBufferStringBuilder,数组Arrays工具类,集合,ListSet
我本身也在复习,一遍复习一边写的,现在又在工作,每天晚上才有一点时间复习。
关于静态语句块和实例语句块有点忘记了,刚才回顾了一下。
静态语句块就是static{},在类加载的时候执行,而且只执行一次。
实例语句块就是{},在构造方法执行前执行,也就是在new这个对象的时候会先执行实例语句块的代码,按顺序执行。想试试的话,new两次Bean对象就知道了。

public class Bean {
    static {
        System.out.println("Bean静态语句块,类加载时执行,只执行一次");
    }
    {
        System.out.println("Bean实例语句块,new对象的时候执行,1");
    }
    {
        System.out.println("Bean实例语句块,new对象的时候执行,2");
    }

    public Bean() {
        System.out.println("Bean,构造函数");
    }
}

再说一下String,因为这个只要创建了,就不能修改,所以如果需要频繁创建或者拼接的时候最好不要用了。
StringBuffer,StringBuffer内部采用的是byte[],用这个对象的append()方法拼接字符串,大量减少字符串常量池的内存使用情况,而且StringBuffer是线程安全的,因为这个对象里面的方法基本都加上了synchronized修饰,synchronized是一个锁,后面复习到多线程的时候在仔细写一下,这里挖个坑,留着以后填。
还有一个类是StringBuilder,和StringBuffer使用是一样的,而且这个比StringBuffer速度快,但是有个缺点,如果在多线程中使用,就不安全了,以为这个类的方法都没有synchronized修饰。
说一下啥时候用StringBuilder把,比较常见的是后台代码的拼接sql语句的时候,经常一大堆判断条件,需要追加的条件太多,这时候最好用StringBuffe。
还有一个常用类,就是枚举enum,枚举也能在switch里面使用,但是低版本就就不支持了。首先定义一个枚举:

//定义一个枚举,
//注意枚举里面不需要数据类型,枚举就相当于你自定义个数据类型,
//只要你别用关键字,随便定义,用逗号隔开就行了,你想定义几个就定义几个
public enum EnumTest {
    first,one,two,three
}

怎么配合switch进行判断呢,看下面代码:

public class Test{  
    public static void main(String[] args) {
  	enumMethod(EnumTest.first);
     }
    //根据枚举判断
    public static void enumMethod(EnumTest enumTest){
        switch (enumTest){
            case first:
                //do something
                System.out.println(enumTest);
                break;
            case one:
                System.out.println(enumTest);
            break;
            case two:
                System.out.println(enumTest);
                break;
            case three:
                System.out.println(enumTest);
                break;
            default:
                break;
        }
    }
}

该看看容器了,Array数组,数组就相当于固定的大盒子,里面有一个一个的小盒子,每次创建一个数组,都是一个固定的盒子。记住数组创建了,能存放的数据量就固定了。如何定义一个数组,下面代码:

//四个int类型的数据,并直接赋值
int[] arrayInt = new int[]{1,20,3,4};
//5个String类型的数据,并直接赋值
String[] arrayStr = {"aa","bb","cc","dd","edf"};
//这个就是能存十个char类型的数据,目前这个里面只是定义了大小,没有实际的数据
char[]  arrChar = new char[10];
int arrIntLength = arrayInt.length;//4
int arrayStrLength = arrayStr.length;//5
int arrCharLength = arrChar.length;//10

上面的是一维数组,一维知道什么意思吧,就是一条线,一条线不够用的时候怎么办呢,就有了二维数组。怎么写,看下面代码:

int[][] arrInt = {{1,10},{3,5}};
for (int i = 0; i < arrInt.length; i++) {
    for (int j = 0; j < arrInt[i].length; j++) {
        System.out.println("arrInt["+i+"]:"+arrInt[i]+"--arrInt["+i+"]["+j+"]:"+arrInt[i][j]);
    }
}
/*这是我的执行结果,[I@1540e19d这是地址值,其他人运行这个值就不一样了
arrInt[0]:[I@1540e19d--arrInt[0][0]:1
arrInt[0]:[I@1540e19d--arrInt[0][1]:10
arrInt[1]:[I@677327b6--arrInt[1][0]:3
arrInt[1]:[I@677327b6--arrInt[1][1]:5*/

如果自己写排序是不是挺费事的,所以java开发者给咱们提供了一个强大的工具类Arrays,这个类里面的方法给用户用的,都是静态方法,直接类名点就可以直接使用了,不用new对象。简单说两个方法,一个是sort()方法,对数组进行排序,还有一个方法binarySearch(),采用二分法查找你想要的值所在的下标。二分法是一种算法,后面复习到的时候在详细写写,先挖个坑在这,以后填。
如果有固定不变的数据,就用数组就行了,定义并赋值,还是挺方便的,但是因为数组定义的时候就限定的容量,如果数据量不确定的时候,就太不方便了,所以java开发者很好心的出了一个叫做集合的类,集合是根据数据量动态申请内存空间的,而且还是两个集合类,一种是List,另一种是Set,这两个都是接口不能实例化。
首先说一下List,这个集合是有序可重复,有序的意思按照存入的顺序,从0~往后存,根据角标可以按照顺序取出来。List的常用实现类有两个,一个是ArrayList,一个是LinkedList

ArrayList的底层采用的数组存储元素的,比较适合查询,不是和频繁增删

LinkedList的底层是双向链表存储元素,比较适合增删,不适合查询。这里又要挖个坑了,链表数据结构以后再说。

还有一个Vector也是List的实现类,而且是线程安全的,但是效率比较低,目前用的人不太多,知道一下就行了。

Set这个集合,无序不可重复,它的常用实现类是HashSet

SortedSet是Set的派生类,但是同样是接口,不过这个比较有意思,既然是Set的派生类,那么他也是不可重复的,但是SortedSet会根据元素的大小自动排序,这就和List的有序不一样了,它的实现类是TreeSet

以上是一个一个的存储,还有一种是一对一对存储的,就是Map集合,是以键值对方式存储的,键(key)是不可重复的,值(value)是可重复的,Map是一个接口,不能实例,能实例的是它的子类,HashMap,这个集合是无序的。Map集合下还有一个SortedMap接口,实现了Map接口,具体的实现类是TreeMap集合,TreeMap集合是有序的集合。
上面这些集合都是平时比较常用的集合,能满足一般项目需求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
期末考试题型: 一、 填空题(本题共15空 ,每空1分,共15分。) 二、 单项选择题(本题共20小题,每题1分,共20分。) 三、 是非题(对划“√”,错划“×”,本题共10小题,每题1分,共10分。) 四、 简答题(本题共5小题,每小题5分,共25分。) 五、 程序填空题(本题共5空 ,每空2分,共10分。) 六、 编程题(本题共2小题,每小题10分,共20分。) 二、填空题 1、Java语言是一种完全的_面相对象___程序设计语言。 2、布尔型常量有两个值,它们分别是_true__、_false___。 3、在定义一个方法时,一般都要指明该方法的返回值类型,如果它不返回任何值,则必须将其声明成 void 。 4、在Java的语言环境中已经包含了一组相关的核心类库,它们属于Java.lang包。 5、写出完整的main方法的声明 public static void main(String args[]) 。 6、要设计一个Applet小程序,必须先引入包 java.applet 。 7、设x=2.5,a=7,y=4.7,算术表达式x+a%3*(int)(x+y)%2/4的值为:2.75___ 8、被关键字_final___修饰的方法是不能被当前类的子类重新定义的方法。 9、Java中类成员的限定词有以下几种:private, _protected__, public__, 默认友好。 10、基类的公有成员在派生类中的访问权限由_基类___决定。 11、用static修饰的方法,称为静态方法。它们不是对象的方法,而是整个类的方法。静态方法只能处理用关键字_static___修饰的数据。 12、在Java中有一种叫作__构造方法__的特殊方法,我们在程序中用它来对类的对象成员进行初始化。 13、面向对象技术具有_封装性___、_继承性___、_抽象性___、多态性等特性。 14、Java中所有类都是类 _Object___的子类。 15、顺序执行以下两个语句的输出结果是: 10 。 String s = “我喜欢学习Java!”; System.out.println(s.length( )); 16、据程序的构成和运行环境的不同,Java源程序分为两大类: Application 程序和 Applet 程序。 17、如果一个Java源程序文件中定义有4个类,则使用Sun公司的JDK编译器javac编译该源程序文件将产生 4 个文件名与类名相同而扩展名为 class 的字节码文件。 18、开发与运行Java程序需要经过的三个主要步骤为 编辑源文件 、 编译器编译生成字节码文件 和 解释器执行 。 19、如果一个Java Applet源程序文件只定义有一个类,该类的类名为MyApplet,则类MyApplet必须是 Applet 类的子类并且存储该源程序文件的文件名必须为 MyApplet.java 。 20、 一个Java Application源程序文件名为MyJavaApplication.java,如果使用Sun公司的Java开发工具JDK编译该源程序文件并使用其虚拟机运算这个程序的字节码文件,应该顺序执行如下两个命令: javac MyJavaApplication.javajava MyJavaApplication 。 21、在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码字符占用 2 字节内存空间,这样,无论是中文字符还是英文字符,每个都是占用2 字节内存空间。 22、在Java程序中定义的类有两种成员: 静态成员 、 实例成员 。 23、Java源程序是由类定义组成的,每个程序中可以定义若干个类,但是只有一个类是主类。在Java Application中,这个主类是指包含 main 方法的类;在Java Applet里,这个主类是一个系统类 Applet 的子类。 24、创建一个名为 MyPackage 的包的语句是 package MyPackage ; , 该语句应该放在程序的位置为: 程序中非注释行的第一行 。 25、 抽象或abstract 方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。 最终后final 方法是不能被当前类的子类重新定义的方法。 26、多态是指 一种定义,多种实现 ,在Java中有两种多态,一种是使用方法的 重载 实现多态,另一种是使用方法的 覆盖 实现多态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值