Java之学习过错(三)

1.try-catch-finally

三个语句块中如果有return语句的执行顺序。finally中有return用finally.return代替,顺序为“try语句  ->  catch  ->  finally  ->  finally.return  ->  catch.return  ->  try.return”,没有相应的阶段请忽略该阶段,任何阶段的return被执行,则整个语句块结束

先执行finally中的语句,再返回函数调用。

package test;

public class Initial {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Initial a = new Initial();
		int result = a.test();
		System.out.println("test方法执行完毕,返回值为"+result);
        int result2 = a.test2();
        System.out.println("test2执行完毕" + result2);
	}
	public int test() {
		int divider = 10;
		int result = 100;
		try {
			while(divider > -1) {
				divider--;
				result = result + 100/divider;
			}
			return result;
		}catch(Exception e) {
			e.printStackTrace();
			System.out.println("循环异常抛出了");
			return -1;
		}
		
	}
	public int test2() {
		int divider = 10;
		int result = 100;
		try {
			while(divider > -1) {
				divider--;
				result = result + 100/divider;
			}
			return result;
		}catch(Exception e) {//格式为Exception e
			e.printStackTrace();
			System.out.println("循环异常抛出了");
			return result = 999;
	    }finally {
	    	System.out.println("这是finally");
	    	System.out.println("result="+result);
	    }
	}

}

2.字符串的不变性

String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。

public class HelloWorld {
    public static void main(String[] args) {
		String s1 = "imooc";
		String s2 = "imooc";
        
        //定义字符串s3,保存“I love”和s1拼接后的内容
		 
		String s3 = "I love " + s1;
        // 比较字符串s1和s2
		// imooc为常量字符串,多次出现时会被编译器优化,只创建一个对象
		System.out.println("s1和s2内存地址相同吗?" + (s1 == s2));
        
        //比较字符串s1和s3
		System.out.println("s1和s3内存地址相同吗?" + (s1 == s3) );

		String s4 = "I love " + s1;
         //比较字符串s4和s3
		// s1是变量,s4在运行时才知道具体值,所以s3和s4是不同的对象
		System.out.println("s3和s4内存地址相同吗?" + (s4 == s3));
	}
}
/*s1和s2内存地址相同吗?true
s1和s3内存地址相同吗?false
s3和s4内存地址相同吗?false*/

3.String中的常用方法

int indexOf(int ch) 查找ch字符在字符串中第一次出现的位置
int indexOf(String str) 查找str子字符串中第一次出现的位置
int lastIndexOf(int ch) 查找ch字符在字符串中最后一次出现的位置
int lastIndexOf(String str) 查找str子字符串中最后一次出现的位置
string substring(int beginIndex)  获取从beginIndex位置到结束的子字符串
String substring(int beginIndex, int endIndex) 获取从beginIndex位置到endIndex位置的子字符串
String trim() 返回了去除前后空格的字符串
boolean equals(Object obj) 将该字符串与指定对象相比,返回true或者false//比较的是对象的属性,而==比较的是对象的地址这是和C++又一个地方不同
String toLowerCase()  将字符串转换为小写
String toUpperCase()   将字符串转化为大写
char charAt(int index)获取字符串中指定位置的字符//不和C++中一样可以直接利用下标得到字符,必须通过此方法

4.除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串,频繁操作字符串时,就会额外产生很多临时变量。(进行大量的字符串连接的时候可以感受到内存超限的可怕)

使用 StringBuilder 或 StringBuffer 就可以避免这个问题。至于 StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。

5.包装类

基本类型     对应的包装类
byte         Byte
short        Short
int          Integer
long         Long
float        Float
double       Double
char         Character
boolean      Boolean


返回名             方法名                 解释
byte               byteValue()          将该Inter转换为byte类型
double             doubleValue()        转换为double类型
float              floatValue()         转换为float类型
long               longValue()          转换为long类型
static int         parseInt(String a)   将字符串转换为int类型
String             toString()           转换为字符串类型
static Integer     valueOf(String s)    将字符串转换为Interger类型


基本类型与字符串之间的转化
int c = 10;
String str1 = Integer.toString(c);
String str2 = String.valueOf(c);
String str3 = c+"";


String str = "8";
int d = Integer.parseInt(str);
int e = Integer.valueOf(str);

6.Date与SimpleDateFormat

经常需要处理日期和时间的相关数据可以使用 java.util 包中的 Date 类
java.text 包中的 SimpleDateFormat 类可以对日期时间进行格式化,
如可以将日期转换为指定格式的文本,也可将文本转换为日期。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloWorld {
    
    public static void main(String[] args) throws ParseException {
        
		// 使用format()方法将日期转换为指定格式的文本
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
		SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
		// 创建Date对象,表示当前时间
        Date now = new Date();
        
        // 调用format()方法,将日期转换为字符串并输出
		System.out.println(sdf1.format(now));
		System.out.println(sdf2.format(now));
		System.out.println(sdf3.format(now));

		// 使用parse()方法将文本转换为日期
		String d = "2014-6-1 21:05:36";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
         // 调用parse()方法,将字符串转换为日期
		Date date = sdf.parse(d);
        
		System.out.println(date);
	}
}
7.Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理。java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class HelloWorld {
    
    public static void main(String[] args) {
		// 创建Calendar对象
		Calendar c = Calendar.getInstance();
        
		// 将Calendar对象转换为Date对象
		Date date = c.getTime();
        
		// 创建SimpleDateFormat对象,指定目标格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
		// 将日期转换为指定格式的字符串
		String now = sdf.format(date);
		System.out.println("当前时间:" + now);
	}
}

8.Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round();

返回值     方法名        解释
long       round()      返回四舍五入后的整数
double     floor()      返回小于参数的最大整数
double     ceil()       返回大于参数的最小整数
double     random()     返回[0,1)之间的随机浮点数(如果需要整数的话进行强制转化)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值