常用对象

来源:互联网 发布:界面编程语言 编辑:程序博客网 时间:2024/05/18 01:11
1:API的概述(了解)
(1)应用程序编程接口。
(2)就是JDK提供给我们的一些提高编程效率的java类。

2:Object类(掌握)
(1)Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类。
(2)Object类的构造方法有一个,并且是无参构造
这其实就是子类构造方法默认访问父类的构造是无参构造的原因
(3)要掌握的方法:
A:toString()
返回对象的字符串表示,默认是由类的全路径+'@'+哈希值的十六进制表示。
这个表示其实是没有意义的,一般子类都会重写该方法。
如何重写呢?把该类的所有成员变量值组成返回即可,基本上就是要求信息简单明了。
但是最终还是自动生成。输出对象 本质是调用toString方法;
B:public boolean equals(Object obj)
比较两个对象是否相同。默认情况下,比较的是地址值是否相同。
而比较地址值是没有意义的,所以,一般子类也会重写该方法比较成员变量值是否相同。
重写过程,if(this == obj){return true;}判断该对象名是否是该类名一个对象if(!(obj instanceof Student)){return false;}
Student s = (Student)obj;return this.name.equals(s.name) && this.age == s.age;
但是最终还是自动生成。
(4)要了解的方法:
A:public int hashCode()返回对象的哈希值。哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值。
B:public final Class getClass() 返回对象的字节码文件对象,此 Object 的运行时类,反射中我们会详细讲解,public String getName():以 String 的形式返回此 Class 对象所表示的实体
C:protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回收,但是什么时候回收不确定。
D:protected Object clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。
    接口Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。 这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。
E:public static String toHexString(int i):把一个整数转成一个十六进制表示的字符串,在Integer类下
(5)两个注意问题;
A:直接输出一个对象名称,其实默认调用了该对象的toString()方法。
B:面试题 
==和equals()的区别?
A:==
基本类型:比较的是值是否相同
引用类型:比较的是地址值是否相同
B:equals()
只能比较引用类型。默认情况下,比较的是地址值是否相同。
但是,我们可以根据自己的需要重写该方法。

Scanner:用于接收键盘录入数据。A:导包B:创建对象C:调用方法
public static final InputStream in; 标准的输入流,对应着键盘录入
构造方法:Scanner(InputStream source) Scanner sc = new Scanner(System.in);
public boolean hasNextXxx():判断是否是某种类型的元素
public Xxx nextXxx():获取该元素
InputMismatchException:输入的和你想要的不匹配
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值
先获取一个数值,在获取一个字符串,会出现问题。主要原因:就是那个换行符号的问题。
解决:A:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。B:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。

字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。
A:字符串字面值"abc"也可以看成是一个字符串对象。字面值作为字符串对象和通过构造方法创建对象的不同
B:字符串是常量,一旦被赋值,就不能被改变。这里指的是字符串的内容不能改变,而不是引用不能改变。
构造方法:
 * public String():空构造
 * public String(byte[] bytes):把字节数组转成字符串
 * public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
 * public String(char[] value):把字符数组转成字符串
 * public String(char[] value,int index,int count):把字符数组的一部分转成字符串
 * public String(String original):把字符串常量值("abcde")转成字符串

 ** String类的判断功能:
 * boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
 * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
 * boolean contains(String str):判断大字符串中是否包含小字符串
 * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
 * boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
 * boolean isEmpty():判断字符串是否为空。

* String类的获取功能
 * int length():获取字符串的长度。
 * char charAt(int index):获取指定索引位置的字符
 * int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
 * 为什么这里是int类型,而不是char类型?
 * 原因是:'a'和97其实都可以代表'a'
 * int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
 * int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
 * int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
 * String substring(int start):从指定位置开始截取字符串,默认到末尾。包含start这个索引
 * String substring(int start,int end):从指定位置开始到指定位置结束截取字符串,包括start索引但是不包end索引

* String的转换功能:
 * byte[] getBytes():把字符串转换为字节数组。
 * char[] toCharArray():把字符串转换为字符数组。
 * static String valueOf(char[] chs):把字符数组转成字符串。
 * static String valueOf(int i):把int类型的数据转成字符串。
 * 注意:String类的valueOf方法可以把任意类型的数据转成字符串。
 * String toLowerCase():把字符串转成小写。
 * String toUpperCase():把字符串转成大写。
 * String concat(String str):把字符串拼接。

*String类的其他功能: 
 * 替换功能:
 * String replace(char old,char new)
 * String replace(String old,String new)
 *
 * 去除字符串两空格
 * String trim()
 * 
 * 按字典顺序比较两个字符串  
 * int compareTo(String str)
 * int compareToIgnoreCase(String str)

 * 字符串的方法:
 * public int length():返回此字符串的长度。
   String s = new String(“hello”)和String s = “hello”;的区别?
 * 有。前者会创建2个对象,后者创建1个对象。
* 字符串如果是变量相加,先开空间,在拼接。
 * 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。
String类重写了equals()方法,比较的是内容是否相同。
 * 
 * 注意:
 * 字符串内容为空和字符串对象为空。
 * String s = "";
 * String s = null;

 * 安全 -- 同步 -- 数据是安全的
 * 不安全 -- 不同步 -- 效率高一些
 * 安全和效率问题是永远困扰我们的问题。
 * 安全:医院的网站,银行网站
 * 效率:新闻网站,论坛之类的
 * 
 * StringBuffer:
 * 线程安全的可变字符串。
 * 
 * StringBuffer和String的区别?
 * 前者长度和内容可变,后者不可变。
 * 如果使用前者做字符串的拼接,不会浪费太多的资源。
 * 
 * StringBuffer的构造方法:
 * public StringBuffer():无参构造方法
 * public StringBuffer(int capacity):指定容量的字符串缓冲区对象
 * public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
 *
 * StringBuffer的方法:
 * public int capacity():返回当前容量。理论值
 * public int length():返回长度(字符数)。 实际值

* StringBuffer的添加功能:
 * public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
 * public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

 * StringBuffer的删除功能
 * public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
 * public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身

 * StringBuffer的替换功能:
 * public StringBuffer replace(int start,int end,String str):从start开始到end用str替换

* StringBuffer的反转功能:
 * public StringBuffer reverse()

* StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了
 * public String substring(int start)
 * public String substring(int start,int end)

* StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了
 * public String substring(int start)
 * public String substring(int start,int end)

1:String,StringBuffer,StringBuilder的区别?
 * A:String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。
 * B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
 * 
 * 2:StringBuffer和数组的区别?
 * 二者都可以看出是一个容器,装其他的数据。
 * 但是呢,StringBuffer的数据最终是一个字符串数据。
 * 而数组可以放置多种数据,但必须是同一种数据类型的。

String作为参数传递,效果和基本类型作为参数传递是一样的。

 * 为了对基本数据类型进行更多的操作,更方便的操作,Java就针对每一种基本数据类型提供了对应的类类型。包装类类型。
 * byte Byte
 * short Short
 * int Integer
 * long Long
 * float Float
 * double Double
 * char Character
 * boolean Boolean
 * 
 * 用于基本数据类型与字符串之间的转换。

* Integer的构造方法:
 * public Integer(int value)
 * public Integer(String s)
 * 注意:这个字符串必须是由数字字符组成

* 常用的基本进制转换
 * public static String toBinaryString(int i)
 * public static String toOctalString(int i)
 * public static String toHexString(int i)
 * 
 * 十进制到其他进制
 * public static String toString(int i,int radix)
 * 由这个我们也看到了进制的范围:2-36
 * 为什么呢?0,...9,a...z
 * 
 * 其他进制到十进制
 * public static int parseInt(String s,int radix)

* 自动装箱:把基本类型转换为包装类类型
 * 自动拆箱:把包装类类型转换为基本类型

Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据,每次并不创建新的空间

* Character 类在对象中包装一个基本类型 char 的值
 * 此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然
 * 
 * 构造方法:
 * Character(char value)

 * public static boolean isUpperCase(char ch):判断给定的字符是否是大写字符
 * public static boolean isLowerCase(char ch):判断给定的字符是否是小写字符
 * public static boolean isDigit(char ch):判断给定的字符是否是数字字符
 * public static char toUpperCase(char ch):把给定的字符转换为大写字符
 * public static char toLowerCase(char ch):把给定的字符转换为小写字符

* Arrays:针对数组进行操作的工具类。比如说排序和查找。
 * 1:public static String toString(int[] a) 把数组转成字符串
 * 2:public static void sort(int[] a) 对数组进行排序
 * 3:public static int binarySearch(int[] a,int key) 二分查找

* 由于在运算的时候,float类型和double很容易丢失精度,演示案例。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal
 * 
 * BigDecimal类:不可变的、任意精度的有符号十进制数,可以解决数据丢失问题。

* 构造方法:
 * public BigDecimal(String val)
 * 
 * public BigDecimal add(BigDecimal augend)
 * public BigDecimal subtract(BigDecimal subtrahend)
 * public BigDecimal multiply(BigDecimal multiplicand)
 * public BigDecimal divide(BigDecimal divisor)
 * public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):商,几位小数,如何舍取

* BigInteger:可以让超过Integer范围内的数据进行运算
 * 
 * 构造方法:
 * BigInteger(String val) 

* public BigInteger add(BigInteger val):加
 * public BigInteger subtract(BigInteger val):减
 * public BigInteger multiply(BigInteger val):乘
 * public BigInteger divide(BigInteger val):除
 * public BigInteger[] divideAndRemainder(BigInteger val):返回商和余数的数组

正则表达式:符合一定规则的字符串。

* 判断功能
 * String类的public boolean matches(String regex)
* 分割功能
 * String类的public String[] split(String regex)
 * 根据给定正则表达式的匹配拆分此字符串。
* 替换功能
 *  String类的public String replaceAll(String regex,String replacement)
 *  使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

* 获取功能
 * Pattern和Matcher类的使用
 *
 * 模式和匹配器的基本使用顺序


// 把规则编译成模式对象
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(s);
// 调用匹配器对象的功能
// 通过find方法就是查找有没有满足条件的子串
// public boolean find()
// boolean flag = m.find();
// System.out.println(flag);
// // 如何得到值呢?
// // public String group()
// String ss = m.group();
// System.out.println(ss);

 * Math:用于数学运算的类。
 * 成员变量:
 * public static final double PI
 * public static final double E
 * 成员方法:
 * public static int abs(int a):绝对值
 * public static double ceil(double a):向上取整
 * public static double floor(double a):向下取整
 * public static int max(int a,int b):最大值 (min自学)
 * public static double pow(double a,double b):a的b次幂
 * public static double random():随机数 [0.0,1.0)
 * public static int round(float a) 四舍五入(参数为double的自学)
 * public static double sqrt(double a):正平方根
 
 Random:产生随机数的类
 * 
 * 构造方法:
 * public Random():没有给种子,用的是默认种子,是当前时间的毫秒值
 * public Random(long seed):给出指定的种子
 *
 * 给定种子后,每次得到的随机数是相同的。
 *
 * 成员方法:
 * public int nextInt():返回的是int范围内的随机数
 * public int nextInt(int n):返回的是[0,n)范围的内随机数

 * System类包含一些有用的类字段和方法。它不能被实例化。 
 * 
 * 方法:
 * public static void gc():运行垃圾回收器。 
 * public static void exit(int status):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。 
 * public static long currentTimeMillis():返回以毫秒为单位的当前时间
 * public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
 * 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

* Date:表示特定的瞬间,精确到毫秒。 
 * 
 * 构造方法:
 * Date():根据当前的默认毫秒值创建日期对象
 * Date(long date):根据给定的毫秒值创建日期对象

 * public long getTime():获取时间,以毫秒为单位
 * public void setTime(long time):设置时间
 * 
 * 从Date得到一个毫秒值
 * getTime()
 * 把一个毫秒值转换为Date
 * 构造方法
 * setTime(long time)

* Date --String(格式化)
 * public final String format(Date date)
 * 
 * String -- Date(解析)
 * public Date parse(String source)
 * 
 * DateForamt:可以进行日期和字符串的格式化和解析,但是由于是抽象类,所以使用具体子类SimpleDateFormat。
 * 
 * SimpleDateFormat的构造方法:
 * SimpleDateFormat():默认模式
 * SimpleDateFormat(String pattern):给定的模式
 * 这个模式字符串该如何写呢?
 * 通过查看API,我们就找到了对应的模式
 * 年 y
 * 月 M
 * 日 d
 * 时 H
 * 分 m
 * 秒 s

* Calendar:它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
 * 
 * public int get(int field):返回给定日历字段的值。日历类中的每个日历字段都是静态的成员变量,并且是int类型。

// 其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance(); // 子类对象


// 获取年
int year = rightNow.get(Calendar.YEAR);

* public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作。
 * public final void set(int year,int month,int date):设置当前日历的年月日

原创粉丝点击