Java基础夯实

Java运行过程
  • 在开发集成环境下编辑一个java文件,如User.java文件。
  • 通过javac User.java命令将该文件编译成字节码文件User.class。(前提是编译无错)
  • 通过java User执行代码文件。
  • 类的主方法(main)中的String[] argsmain方法的参数。如运行java文件时使用java User aaa命令:其中java表示执行命令,User为文件类名,aaa为传入的参数。则main方法中的args[0]值为aaa
String类
  • String类是引用类型,是对象,不是基本类型。
  • 底层是char[]数组实现,且被final关键字修饰,其值一旦创建不可更改。
String s1 = "abc";            // 常量池
String s2 = new String("abc");     // 堆内存中
System.out.println(s1==s2);        // false两个对象的地址值不一样。
System.out.println(s1.equals(s2)); // true

s1="123";  //将s1指向"123"这个字面量;但"abc"仍存在于内存中。

String s3=s1+"c";
System.out.println(s3==s2);         // false
System.out.println(s3.equals(s2));  // true

对于 s3,先创建StringBuilder(或 StringBuffer)对象,
通过 append 连接得到 abc ,再调用 toString() 转换得到的地址指向 s3。故 (s3==s2) 为 false
  • String与StringBuffer、StringBuilder区别
1. String:字符串常量,字符串长度不可变。Java中String 是immutable(不可变)的。
    用于存放字符的数组被声明为final的,因此只能赋值一次,不可再更改。
2. StringBuffer:字符串变量(Synchronized,即线程安全)。
    如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer;
    如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。
3. 字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。

4. 基本原则:

如果要操作少量的数据用 String ;
单线程操作大量数据用StringBuilder ;
多线程操作大量数据,用StringBuffer。
  • 字面量和new创建的对象。
    String str1 = "hello world";
    String str2 = new String("hello world");
    String str3 = "hello world";
    String str4 = new String("hello world");
    System.out.println(str1==str2); // false
    System.out.println(str1==str3); // true
    System.out.println(str2==str4); // false


1. String str1 = "hello world"; 和 String str3 = "hello world"; 都在编译期间生成了字面常量和符号引用;
    运行期间字面常量 "hello world" 被存储在运行时常量池(当然只保存了一份)。
    通过这种方式来将 String 对象跟引用绑定的话,JVM 执行引擎会先在运行时常量池查找是否存在相同的字面常量,
    如果存在,则直接将引用指向已经存在的字面常量;
    否则在运行时常量池开辟一个空间来存储该字面常量,并将引用指向该字面常量。
2. 通过 new 关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。
因此通过 new 来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。
异常类
Throwable类
Exception类
Error类
IOException类
RuntimeException类
  • 从大体来分异常为两块:
1、error---错误 : 是指程序无法处理的错误,表示应用程序运行时出现的重大错误。
    例如jvm运行时出现的OutOfMemoryError以及Socket编程时出现的端口占用等程序无法处理的错误。

2、Exception --- 异常 :异常可分为运行时异常跟编译异常

    1)运行时异常:即RuntimeException及其之类的异常。
        这类异常在代码编写的时候不会被编译器所检测出来,是可以不需要被捕获,但是程序员也可以根据需要进行捕获抛出。
        常见的RUNtimeException有:NullpointException(空指针异常),ClassCastException(类型转换异常),IndexOutOfBoundsException(数组越界异常)等。
    2)编译异常:RuntimeException以外的异常。
        这类异常在编译时编译器会提示需要捕获,如果不进行捕获则编译错误。
        常见编译异常有:IOException(流传输异常),SQLException(数据库操作异常)等。

注意finally永远都会在catchreturn前被执行。若finally块中已有return语句则直接返回不会再去执行catch语句中的return语句。

集合框架
Collection接口
List接口
ArrayList类
LinkedList类
Set接口
HashSet类
Queue
Map接口
HashMap类
LinkedMap类
  • 集合分为两类:存放元素集合的Collection,存放键值对的Map
  • Collections接口提供相关的算法如排序等。
  • SetList的区别:
Set: 存放元素唯一的无序集合。
List: 存放元素不唯一的有序集合。

ArrayList: 底层实现为数组,插入和删除操作效率低,查询操作效率高。
LinkedList: 底层实现为链表,插入和删除操作效率高,查询操作效率低。

多线程编程
  • 创建线程的方式:
1. 继承 Thread 类
2. 实现Runnable接口
3. 通过 Callable 和 Future 创建线程。
  • 继承Thread类:实现startrun方法。
1. start方法:使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
2. run方法:线程体执行。
3. join(long millisec):等待该线程终止的时间最长为 millis 毫秒。
4. 静态方法yield:暂停当前正在执行的线程对象,并执行其他线程。
5. 静态方法 sleep(long millisec):在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值