java_常用对象API

这里写图片描述

这里写图片描述

这里写图片描述

1Object对象
面向对象的核心思想:“找合适的对象,做适合的事情”。
合适的对象:
1.自己描述类,自己创建对象。
2.sun已经描述了好多常用的类,可以使用这些类创建对象。
API(Application Program Interface)
sun定义的那么多类的终极父类是Object。Object描述的是所有类的通用属性与方法。
1.1toString方法

toString() 返回对象的描述信息 java.lang.Object@de6ced 类名@哈希码值的十六进制形式。
直接输入一个对象的时候,会调用对象的toString方法。
练习:自定义一个Person类,打印该对象的描述信息,要求描述信息为:姓名 — 年龄

问题:调用p的toString方法时,打印出来的信息是类名+内存地址值。不符合要求。根据我们之前学的继承,假如父类的指定的功能不能满足要求,那么子类可以复写父类的功能函数。那么该对象再调用toString()方法时,则会调用子类复写的toString方法。

编程习惯:开发者要对自定义的类重写toString(),对对象做详细的说明

1.2equals方法
equals() 返回的是比较的结果 如果相等返回true,否则false,比较的是对象的内存地址值。

问题:比较两个人是否是同一个人,根据两个人的名字判断。

问题:如果根据名字去作为判断两个人是否是同一个时,明显p与p1是同一个人,但是程序输入却不是同一个人。不符合我们现实生活的要求。

解决: 根据我们学的继承中的函数复写,如果父类的函数不能满足我们目前的要求,那么就可以在子类把该功能复写,达到复合我们的要求。

编程习惯:开发者要对自定义的类重写equals(),使得比较两个对象的时候比较对象的属性是否相等,而不是内存地址。
1.3hashCode方法
hashCode() 返回该对象的哈希码值: 采用操作系统底层实现的哈希算法。 同一个对象的哈希码值是唯一的。
java规定如果两个对象equals返回true,那么这两个对象的hashCode码必须一致。

2String类
String类描述的是文本字符串序列。 留言 QQ 写日志。
创建String类的对象的两种方式:
1.”“直接赋值法
2.new关键字法
2.1字符串对象的比较

String Str = “jack”这个语句会先检查字符串常量池是否存放这个”jack1”这个字符串对象,如果没有存在,那么就会在字符串常量池中创建这个字符串对象,如果存在直接返回该字符串的内存地址值。
String str3 = new String(“jack”) 该语句会创建两个对象,首先会先检查字符串常量池中存不存在jack这个字符串对象,如果不存在就会创建,如果存在就返回内存地址值。创建了出来之后,new String这个语句就会在堆内存中开辟一个字符串对象。总共两个对象。

2.2获取方法
int length() 获取字符串的长度
char charAt(int index) 获取特定位置的字符 (角标越界)
int indexOf(String str) 获取特定字符的位置(overload)
int lastIndexOf(int ch) 获取最后一个字符的位置

2.3判断方法
boolean endsWith(String str) 是否以指定字符结束
boolean isEmpty()是否长度为0 如:“” null V1.6
boolean contains(CharSequences) 是否包含指定序列 应用:搜索
boolean equals(Object anObject) 是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等

package cn.itcsat.string;

import java.util.Arrays;

/*
2.3 判断方法
    boolean endsWith(String str) 是否以指定字符结束
    boolean isEmpty()是否长度为0 如:“” null V1.6
    boolean contains(CharSequences) 是否包含指定序列 应用:搜索
    boolean equals(Object anObject) 是否相等
    boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等

2.4 转换方法     
char[] toCharArray()  将字符串转换为字符数组
byte[]  getBytes();

字节数组与字符数组、字符串他们三者之间是可以互相转换。

*/
public class Demo4 {

    public static void main(String[] args) {
        String str = "Demo.java";
        System.out.println("是否以指定 的字符串结束:"+ str.endsWith("ja"));
        //str = "";
        System.out.println("判断字符串是否为空内容:"+str.isEmpty());
        System.out.println("判断字符串是否包含指定的内容:"+ str.contains("Demo"));
        System.out.println("判断两个 字符串的内容是否一致:"+ "DEMO.JAVA".equals(str));
        System.out.println("判断两个字符串的内容是否一致(忽略大小写比较):"+ "DEMO.JAVA".equalsIgnoreCase(str));


        //转换的方法
        char[] buf = str.toCharArray();  //把字符串转换字符数组
        System.out.println("字符数组:"+ Arrays.toString(buf));
        byte[] buf2 = str.getBytes();   //把字符串转字节数组
        System.out.println("字节数组:"+ Arrays.toString(buf2));
    }

}

2.4转换方法
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() 将字符串转换为字符数组

2.5其他方法
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() 去除空格
2.6练习
1.去除字符串两边空格的函数。
public class Demo1 {
// 定义一个祛除字符串两边空格的函数
public static String trim( String str ){

// 0、定义求字串需要的起始索引变量
int start = 0;
int end = str.length()-1;
// 1. for循环遍历字符串对象的每一个字符
for (int i = 0; i

package cn.itcast.stringbuffer;
/*
如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer)。


StringBuffer 其实就是一个存储字符 的容器。

笔试题目:使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
    StringBuffer 底层是依赖了一个字符数组才能存储字符数据 的,该字符串数组默认 的初始容量是16, 如果字符数组的长度不够使用 死,自动增长1倍。
package cn.itcast.stringbuffer;
/*
如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer)。


StringBuffer 其实就是一个存储字符 的容器。

笔试题目:使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
    StringBuffer 底层是依赖了一个字符数组才能存储字符数据 的,该字符串数组默认 的初始容量是16, 如果字符数组的长度不够使用 死,自动增长1倍。


StringBuffer 是一个存储字符的容器 

容器的具备 的行为

    String 

    增加
        append(boolean b)    可以添加任意类型 的数据到容器中
        insert(int offset, boolean b)  指定插入的索引值,插入对应 的内容。 

    删除
        delete(int start, int end)  根据指定的开始与结束的索引值删除对应的内容。
        deleteCharAt(int index)   根据指定 的索引值删除一个字符。


    修改

        replace(int start, int end, String str) 根据指定 的开始与结束索引值替代成指定的内容。
        reverse()   翻转字符串缓冲类的内容。  abc--->cba

        setCharAt(int index, char ch)  把指定索引值的字符替换指定的字符。 
        substring(int start, int end)  根据指定的索引值截取子串。
        ensureCapacity(int minimumCapacity)  指定StringBuffer内部的字符数组长度的。

    查看
        indexOf(String str, int fromIndex) 查找指定的字符串第一次出现的索引值,并且指定开始查找的位置。
        lastIndexOf(String str) 

        capacity() 查看当前字符数组的长度。 
        length() 

        charAt(int index) 
        toString()   把字符串缓冲类的内容转成字符串返回。


StringBuffer 与 StringBuilder的相同处与不同处:

    相同点:
        1. 两个类都是字符串缓冲类。
        2. 两个类的方法都是一致的。
    不同点:
        1. StringBuffer是线程安全的,操作效率低 ,StringBuilder是线程非安全的,操作效率高。
        2. StringBuffer是jdk1.0出现 的,StringBuilder 是jdk1.5的时候出现的。

推荐使用: StringBuilder,因为操作效率高。


*/

public class Demo2 {

    public static void main(String[] args) {
        //先使用StringBuffer无参的构造函数创建一个字符串缓冲类。
        StringBuffer sb = new StringBuffer(); 
        sb.append("abcjavaabc");
        /*
        添加 
        sb.append(true);
        sb.append(3.14f);
        插入

        sb.insert(2, "小明");
        */

        /*
        删除
        sb.delete(2, 4); //  删除的时候也是包头不包尾
        sb.deleteCharAt(3); //根据指定 的索引值删除一个字符

        修改  
        sb.replace(2, 4, "陈小狗");

        sb.reverse(); // 翻转字符串的内容

        sb.setCharAt(3, '红');

        String subString = sb.substring(2, 4);
        System.out.println("子串的内容:"+ subString);

        查看

        int index = sb.indexOf("abc", 3);
        System.out.println("索引值为:"+index);

        sb.append("javajava");
        System.out.println("查看字符数组的长度:"+ sb.capacity());
        */

        System.out.println("存储的字符个数:"+sb.length());
        System.out.println("索引指定的索引值查找字符:"+sb.charAt(2) );
        System.out.println("字符串缓冲类的内容:"+ sb);

        String content = sb.toString();
        test(content);
    }

    public static void test(String str){

    }

}

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);        
    }


}
package cn.itcast.other;

import java.util.Arrays;
import java.util.Properties;

/*
 System  系统类 主要用于获取系统的属性数据。

System类常用的方法:
    arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 一般
        src - 源数组。
        srcPos - 源数组中的起始位置。
        dest - 目标数组。
        destPos - 目标数据中的起始位置。
        length - 要复制的数组元素的数量。

    currentTimeMillis()  获取当前系统系统。       重点
    exit(int status)  退出jvm  如果参数是0表示正常退出jvm,非0表示异常退出jvm。    一般

    gc()    建议jvm赶快启动垃圾回收期回收垃圾。
    getenv(String name) 根据环境变量的名字获取环境变量。
    getProperty(key) 



    finalize()  如果一个对象被垃圾回收 器回收的时候,会先调用对象的finalize()方法。
 */

class Person{

    String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public void finalize() throws Throwable {
        super.finalize();
        System.out.println(this.name+"被回收了..");
    }
}



public class Demo1 {

    public static void main(String[] args) {
        /*
        int[] srcArr = {10,12,14,16,19};
        //把srcArr的数组元素拷贝 到destArr数组中。
        int[] destArr = new int[4];

        System.arraycopy(srcArr, 1, destArr, 0,4);
        //System.exit(0); //jvm退出..  注意: 0或者非0的 数据都可以退出jvm。对于用户而言没有任何区别。
        System.out.println("目标数组的元素:"+ Arrays.toString(destArr)); // 0 14 16 0
        System.out.println("当前的系统时间:" + System.currentTimeMillis());
        System.out.println("环境变量:"+System.getenv("JAVA_HOME"));


        for(int i = 0 ; i<4; i++){
            new Person("狗娃"+i);
            System.gc(); //建议马上启动垃圾回收期
        }

        Properties properties = System.getProperties();  //获取系统的所有属性。
        properties.list(System.out);
        */
        String value = System.getProperty("os.name");//根据系统的属性名获取对应的属性值
        System.out.println("当前系统:"+value);
    }

}
package cn.itcast.other;

import java.io.IOException;

import javax.management.RuntimeErrorException;

/*
 RunTime   该类类主要代表了应用程序运行的环境。

    getRuntime()  返回当前应用程序的运行环境对象。
    exec(String command)  根据指定的路径执行对应的可执行文件。
    freeMemory()   返回 Java 虚拟机中的空闲内存量。。 以字节为单位
    maxMemory()    返回 Java 虚拟机试图使用的最大内存量。
    totalMemory()    返回 Java 虚拟机中的内存总量



 */
public class Demo2 {

    public static void main(String[] args) throws IOException, InterruptedException {
        Runtime runtime = Runtime.getRuntime();
//      Process process = runtime.exec("C:\\Windows\\notepad.exe");
//      Thread.sleep(3000); //让当前程序停止3秒。
//      process.destroy();
        System.out.println(" Java虚拟机中的空闲内存量。"+runtime.freeMemory());
        System.out.println("Java 虚拟机试图使用的最大内存量:"+ runtime.maxMemory());
        System.out.println("返回 Java 虚拟机中的内存总量:"+ runtime.totalMemory());
    }
}
package cn.itcast.other;

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


/*
日期类 Date 


Calendar


日期格式化类    SimpleDateFormat

 */
public class Demo3  {

    public static void main(String[] args) throws ParseException {
        /*Date date = new Date(); // 获取当前的系统时间
        System.out.println("年份:"+ date.getYear());*/
        /*
        Calendar calendar = Calendar.getInstance(); //获取当前的系统时间。
        System.out.println("年:"+ calendar.get(Calendar.YEAR));
        System.out.println("月:"+ (calendar.get(Calendar.MONTH)+1));
        System.out.println("日:"+ calendar.get(Calendar.DATE));

        System.out.println("时:"+ calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println("分:"+ calendar.get(Calendar.MINUTE));
        System.out.println("秒:"+ calendar.get(Calendar.SECOND));

        // 显示 当前系统时间: 2014年12月26日  xx时xx分xx秒   

         *  日期格式化类    SimpleDateFormat 
         *          作用1: 可以把日期转换转指定格式的字符串     format()
         *          作用2: 可以把一个 字符转换成对应的日期。    parse()   生日
         *      
         */
        Date date = new Date(); //获取当前的系统时间。
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日   HH:mm:ss") ; //使用了默认的格式创建了一个日期格式化对象。
        String time = dateFormat.format(date);  //可以把日期转换转指定格式的字符串
        System.out.println("当前的系统时间:"+ time);

        String birthday = "2000年12月26日   11:29:08";
        Date date2 = dateFormat.parse(birthday);  //注意: 指定的字符串格式必须要与SimpleDateFormat的模式要一致。
        System.out.println(date2);

        Date date21 =new Date();
        SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
        String time2 =dateFormat.format(date21);
        String time21=dateFormat.format(date);
        System.out.println("当前的系统时间:"+time);
        String birthday1= "2000年12月26日  11:28:08";
        Date date22=dateFormat.parse(birthday1);
        System.out.println(date22);
    }
}
package cn.itcast.other;

import java.util.Random;
/*
随机数类
Random


需求: 编写一个函数随机产生四位的验证码。

 */

public class Demo5 {

    public static void main(String[] args) {
        /*
        Random random = new Random();
        int randomNum = random.nextInt(10)+1; //产生 的 随机数就是0-10之间
        System.out.println("随机数:"+ randomNum);
        */
        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);


    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值