这里写代码片
####1Object对象
面向对象的核心思想:“找合适的对象,做适合的事情”。
合适的对象:
1.自己描述类,自己创建对象。
2.sun已经描述了好多常用的类,可以使用这些类创建对象。
API(Application Program Interface)
sun定义的那么多类的终极父类是Object。Object描述的是所有类的通用属性与方法。
public static void main(String[] args) {
// TODO Auto-generated method stub
Object o = new Object();
System.out.println(o.toString());
System.out.println(o);
}
java.lang.Object@3cba8af9
类名@哈希码值的十六进制形式。
直接输入一个对象的时候,会调用对象的toString方法。
1 System类
系统类 主要用于获取系统的属性数据。
exit() 退出虚拟机
gc() 调用垃圾回收器程序,但是调用该方法时候并不会马上执行
finalize() 如果一个对象被垃圾回收 器回收的时候,会先调用对象的finalize()方法。
package com.thread;
public class Mythread {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<4;i++){
new Person("黑喂狗" + i);
System.gc(); //gc() 建议jvm赶快启动垃圾回收期回收垃圾。
}
}
}
class Person{
String name;
public Person(String name) {
this.name = name;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize(); //finalize() 如果一个对象被垃圾回收 器回收的时候,会先调用对象的finalize()方法。
System.out.println(this.name+"被回收了");
}
}
Properties ps = System.getProperties();
ps.list(System.out);
String os_name = System.getProperty("os.name");
System.out.println(os_name);
System.out.println(System.getenv("path"));
2 String API
String(char[] value) 将字符数组转换为字符串
String(char[] value, int offset, int count)
Static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
char[] toCharArray() 将字符串转换为字符数组
String replace(char oldChar, char newChar) 替换
String[] split(String regex) 切割
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)截取字串
String toUpperCase() 转大写
String toLowerCase() 转小写
String trim() 去除空格
3 StringBuffer
StringBuffer : 由于String是不可变的,所以导致String对象泛滥,在频繁改变字符串对象的应用中,需要使用可变的字符串缓冲区类。
字符串特点:字符串是常量;它们的值在创建之后不能更改.
字符串的内容一旦发生了变化,那么马上会创建一个新 的对象。
注意: 字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象。
如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer)。
特点:
1.默认缓冲区的容量是16。
2.StringBuffer : 线程安全的所有的缓冲区操作方法都是同步的。效率很低。
StringBuffer sb = new StringBuffer("jack");
sb.append(true);
sb.append('a');
sb.append(97).append(new char[]{'a','b'});
System.out.println(sb);
4 StringBuilder
StringBuilder 是JDK1.5之后提出的,线程不安全,但是效率要高。用法与StringBuffer类似。
5 Runtime
Runtime 类主要描述的是应用程序运行的环境
long freeMemory() 获取可用内存数
long maxMemory() 获取JVM最大内存数量
Runtime run = Runtime.getRuntime(); //获取应用运行环境对象
System.out.println(run.freeMemory()); //获取JVM可用的内存数
System.out.println(run.maxMemory()); // 获取JVM试图使用的内存总容量
System.out.println(run.totalMemory());
5 Date
Date 类封装的是系统的当前时间.。但是Date已经过时了,sun推荐使用Calendar类。
Calendar: 该类是一个日历的类,封装了年月日时分秒时区。
Date date = new Date();
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int dayofweek = calendar.get(Calendar.DAY_OF_WEEK);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second= calendar.get(Calendar.SECOND);
System.out.println(date);
System.out.println(year);
System.out.println(month);
System.out.println(day);
System.out.println(dayofweek);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
SimpleDateFormat sm = new SimpleDateFormat(“yyyy年MM月dd日 E a hh时mm分ss秒”);
System.out.println(sm.format(new Date()));
输出效果
2016年06月15日 星期三 下午 11时27分09秒
6 Math类
System.out.println("绝对值"+Math.abs(-3));
System.out.println("绝对值"+Math.ceil(3.14)); //向上取整
System.out.println("绝对值"+Math.floor(-3.14));//向下取整
System.out.println("四舍五入:"+Math.round(3.54));//四舍五入
System.out.println("随机数:"+Math.random()); //产生一个随机数.大于等于 0.0 且小于 1.0 的伪随机 double 值
System.out.println("随机数:"+Math.round(Math.random()*10));
7 Random 随机数类
char[] arr = {'中','国','传','a','Q','f','B'};
StringBuilder sb = new StringBuilder();
Random random = new Random();
//需要四个随机数,通过随机数获取字符数组中的字符,
for(int i = 0 ; i< 4 ; i++){
int index = random.nextInt(arr.length); //产生的 随机数必须是数组的索引值范围之内的。
sb.append(arr[index]);
}
System.out.println("验证码:"+ sb);
练习
package cn.itcsat.string;
/*
需求1:自己实现trim的方法。
需求2: 获取上传文件名 "D:\\20120512\\day12\\Demo1.java"。
需求3: 将字符串对象中存储的字符反序。 新中国好 -----> 好国中新
需求4: 求一个子串在整串中出现的次数 。
*/
public class Demo6 {
public static void main(String[] args) {
String str =" 传智 播客 ";
System.out.println(myTrim(str));
str = "D:\\20120512\\day12\\Demo1.java";
getFileName(str);
str = "新中国好";
System.out.println("翻转后的字符串:"+ reverse(str));
str = "abcjavaabcjavaphpjava"; //java
getCount(str, "java");
}
//统计子串出现 的次数
public static void getCount(String str,String target){
int count = 0 ; //用于记录出现的次数
int fromIndex = 0; // 记录从那个索引值开始寻找目标子串
while((fromIndex = str.indexOf(target, fromIndex))!=-1){
//如果indexof方法返回 的不是-1,那么就是已经找到了目标 元素。
count++;
fromIndex = fromIndex+target.length();
}
System.out.println("出现的次数:"+ count);
}
public static String reverse(String str){
char[] arr = str.toCharArray();
for(int startIndex = 0 , endIndex=arr.length-1 ; startIndex<endIndex; startIndex++,endIndex--){
char temp = arr[startIndex];
arr[startIndex] = arr[endIndex];
arr[endIndex] = temp;
}
//使用字符数组构建一个字符串。
return new String(arr);
}
//需求2: 获取上传文件名 "D:\\20120512\\day12\\Demo1.java"。
public static void getFileName(String path){
int index = path.lastIndexOf("\\");
String fileName = path.substring(index+1);
System.out.println("文件名:"+ fileName);
}
// 需求1:自己实现trim的方法。
public static String myTrim(String str){
//先转换成字符 数组
char[] arr = str.toCharArray();
//定义两个 变量记录开始与结束 的索引值
int startIndex = 0 ;
int endIndex = arr.length -1;
//确定开始 的索引值
while(true){
if(arr[startIndex]==' '){
startIndex++;
}else{
break;
}
}
//确定结束 的索引值:
while(true){
if(arr[endIndex]==' '){
endIndex--;
}else{
break;
}
}
//截取子串返回
return str.substring(startIndex,endIndex+1);
}
}