学习java第三周

学习java第三周,第1张

  本周学习的内容并不是特别多,前面的基础基本都学习完了,本周尝试着开始看源码,了解Java语言中源码的作用。所以说时间占用比较大。

1.对String有了更深刻,更透彻的了解。

String 为不可变字符串,通过原码发现,前面有final进行修饰,所以说不可变

这一点与c++当中我们学习的string还是有所不同的,通过一个小例子我们可以很简单的比较出来。

例如String str1="hello"+"java"相当于str1=“hello java”

String str2="hello java" str1==str2 显示结果为true
但str3="hello" str4="java"str5=str3+str4
这时str5==str2 显示结果为false 

所以说,进行字符串比较的时候,一定要使用equals

第一个不同:字符串比较的时候,一定要使用equalr2.equals(str5);

所以接下来学习了能改变字符串的几个类
测试StringBuilder-继承了一个抽象类,这里面的字符串可变,通过源码可以看到!!!
StringBuffer优点:线程安全,效率低。

StringBuilder特点:线程不安全,效率高。

但是我们一般使用StringBuilder;
StringBuffer和StringBuilder的基本用法:
append(字符)-在原字符串后面继续加字符
举例:for(int i=0;i<26;i++)
{char temp=(char)('a'+i);
sb.append(temp);}

sb 为String Builder的一个对象

String Builder当中的几个常用的个方法
sb.reverse()将可变字符串倒转,即abcdef-fedcba;
sb.setCharAt(3,M)将第三个字符改为M
sb.insert(0,“张”)在0处插入一个字符插入我。
通过源码可以发现,insert返回的值为this即自身,所以说可以反复调用,例如
sb.insert(0,“张”).(6,李).(10,黑)等等,为链式调用
sb.delete(20,33)删除某个区间的字符,也是可以链式调用!

接下来讨论的是字符串的拼接问题:
碰到字符串的拼接的问题是,一定要使用append,例如:
StringBuilder sb1=new StringBuilder(" ");
for(int i=0;i<5000;i++){
sb1.append(i);}
时间处理的相关类!Date类
File类代表文件和目录。
File f= new File("d:/a.txt");或者new File("d:\\a.txt")
f.renameTo(new File("d:.txt"))改名 *** 作

一个小知识点:

枚举,如果有必要定义一组常量,定义枚举!
enum 类名{常量}

接下来学习了异常问题,异常问题建档概括用以下几张图来展示一下:

 
    异常,异常机制本质,当程序出现错误时,程序安全退出的机制。
    先抛出异常,在进行捕获异常。
    异常分类
    逻辑判断来排除出来来避免这些异常。
    空指针异常!

 

 数组越界异常

 

 接下来学习了java后期用得比较多的容器:

数组的优点:数组是一种简单的纤细序列,可以快速地访问数组元素,效率高。如果从效率和类检查的角度讲,数组是最好的。

数组劣势:并不够灵活!
容器:collection

 

通过一段简单的代码学习了容器

public static void main(String[] args) {
    Collection mc= new Collection();
    mc.set("1", 0);
    String b=mc.get(0);
    }
}
class Collection{
    Object[]objs=new Object[5];
    
    public void set(E e, int index) {
    objs[index]=e;    

    }
    public E get(int index) {
        return (E)objs[index];
    }
    
}

在该段代码中运用到了泛型,泛型对于后期数据分类储存工程有比较重要的意义。

泛型,帮助我们建立类型安全的集合!本质:数据类型的参数化,占位符,在调用泛型时必须传入实际类型。

对于容器中的方法进行了简单的学习:

Collection c= new ArrayList()<>;
    c.size();判断一下长度
    c.isEmpty();
    c.add("");//可以加多个元素进去。
    c.remove("");//删除容器当中的元素。
    c.clear();//移除所有的元素。
    Object[] objs =c.toArray();//将c当中的元素全部转入进数组当中去。
    c.contains("");//该方法检测容器当中是否含有该元素。

接下来学习了以后用的比较多的Arraylist类,并且学习了当中的几个简单的方法。
    //list01.addAll(list02)将02中的元素全部加入到01当中去
    //list01.removeAll(list02)将01 02中共同的元素删除。
    //list01.retainAll(list02)取两个容器当中共同的元素。
    //set不允许重复,相同的元素。
    //List。
    //List接口常用的实现类有三个:ArrayList LinkedList Vector
    //list.add(位置,E)在索引位置插入元素。
    //list.remove(2)将索引位置为2的元素删除。
    //list.set(2,“”)在索引位置为2的地方修改元素。
    //list.get(索引位置)显示元素。
    //list.indexof(元素)返回第一次出现这个元素的位置,如果不存在返回-1.
    //list.lastIndxof(元素)返回最后一个相同元素的位置。
    //Arraylist底层是用数组实现的存储。特点:查询效率高,增删效率低,线程不安全。
    //数组长度是有限的,而Arraylist可以放任意数量的对象,采用的方法是扩容后。
    

Vector,底层实现和list差不多,需要线程安全时,用Vector。
    接下来是Map接口
    //map中键不能重复!如果重复(是否重复是根据equals方法来判断),则新的覆盖旧的!
    //map.put(1000,e1)e1为类型,指向e1里面的元素。
    //HashMap底层实现采用了哈希表,则会是一种非常重要的数据结构。数组+链表,


 对比c++有了更丰富的方法进行数组元素的便利-迭代器Iterator
    //使用迭代器遍历List/set
    for(Iteratoriter=list.iterator();iter.hashNext();)
    {}

 

 


    接下来是Collections工具类
    //Collections.shuffle(list)随机排列list中的元素。
    //Collection.reverse(list)逆序排列
    //collections.sort(list)递增排列
    //Collections.binarySearch(list,"")在当中查找元素,如果查不到返回-1.
    跟随老师进行了一个简单案例

使用容器存储表格数据!
    //第一种每一行数据使用一个Map。整个表格使用List来存储。orm思想,对象关系映射。
    Map row1=new HashMap<>();
    row1.put("id", 1001);
    row1.put("name","张三");
    row1.put("salary", 20000);
    row1.put("入职日期", "2002.5.4");
    Map row2=new HashMap<>();
    row2.put("id", 1002);
    row2.put("name","王三");
    row2.put("salary", 20000);
    row2.put("入职日期", "2003.5.4");
    Map row3=new HashMap<>();
    row3.put("id", 1003);
    row3.put("name","李三");
    row3.put("salary", 20000);
    row3.put("入职日期", "2004.5.4");
    List> table1=new ArrayList<>();
    table1.add(row1);
    table1.add(row2);
    table1.add(row3);
    for(Maprow:table1) {
        Setkeyset=row.keySet();
        System.out.println(keyset);
        for(String key:keyset) {
            System.out.print(key+":"+row.get(key)+"\t");
        }
        System.out.println();
    }

总结:本周的学习并没有学特别特别多的内容,java和c++还是有非常多的不同的,仅此学到这里,感觉javajdk当中提供的一些方法会对于以后写代码比较方便,但仅仅是学到这里的想法,日后还是要更深入的学习,从下周开始要进入io流的学习,接下来就是要敲图书管理系统,要利用花时间,坚持下去!java的学习之路就此开始!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/923357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存