Java常见对象

Arrays

Arrays:针对数组进行操作的工具类。

Arrays的常用成员方法:

public static String toString(int[] a) //把数组转成字符串

public static void sort(int[] a) //对数组进行排序

public static int binarySearch(int[] a,int key) //二分查找

toString()源码如下:

public static String toString(int[] a) {

if (a == null)

return "null";

int iMax = a.length - 1;

if (iMax == -1)

return "[]";

StringBuilder b = new StringBuilder();

b.append('[');

for (int i = 0; ; i++) {

b.append(a[i]);

if (i == iMax)

return b.append(']').toString();

b.append(", ");

}

}

binarySearch()调用的是binarySearch0(),源码如下:

private static int binarySearch0(int[] a, int fromIndex, int toIndex,int key) {

int low = fromIndex;

int high = toIndex - 1;

while (low <= high) {

int mid = (low + high) >>> 1;

int midVal = a[mid];

if (midVal < key)

low = mid + 1;

else if (midVal > key)

high = mid - 1;

else

return mid; // key found

}

return -(low + 1); // key not found.

}

使用示例:

public class ArraysDemo {

public static void main(String[] args) {

// 定义一个数组

int[] arr = { 24, 69, 80, 57, 13 };

// public static String toString(int[] a) 把数组转成字符串

System.out.println("排序前:" + Arrays.toString(arr));//排序前:[24, 69, 80, 57, 13]

// public static void sort(int[] a) 对数组进行排序

Arrays.sort(arr);

System.out.println("排序后:" + Arrays.toString(arr));//排序后:[13, 24, 57, 69, 80]

// [13, 24, 57, 69, 80]

// public static int binarySearch(int[] a,int key) 二分查找

System.out.println("binarySearch:" + Arrays.binarySearch(arr, 57));//binarySearch:2

System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));//binarySearch:-6

}

}

BigDemical

BigDecimal类:不可变的、任意精度的有符号十进制数,可以解决数据丢失问题。

看如下程序,写出结果

public static void main(String[] args) {

System.out.println(0.09 + 0.01);

System.out.println(1.0 - 0.32);

System.out.println(1.015 * 100);

System.out.println(1.301 / 100);

System.out.println(1.0 - 0.12);

}

输出结果

0.09999999999999999

0.6799999999999999

101.49999999999999

0.013009999999999999

0.88

结果和我们想的有一点点不一样,这是因为浮点数类型的数据存储和整数不一样导致的。

它们大部分的时候,都是带有有效数字位。由于在运算的时候,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)//除法,scale:几位小数,roundingMode:如何舍取

使用BigDecimal改进

public static void main(String[] args) {

/*System.out.println(0.09 + 0.01);

System.out.println(1.0 - 0.32);

System.out.println(1.015 * 100);

System.out.println(1.301 / 100);

System.out.println(1.0 - 0.12);*/

BigDecimal bd1 = new BigDecimal("0.09");

BigDecimal bd2 = new BigDecimal("0.01");

System.out.println("add:" + bd1.add(bd2));//add:0.10

System.out.println("-------------------");

BigDecimal bd3 = new BigDecimal("1.0");

BigDecimal bd4 = new BigDecimal("0.32");

System.out.println("subtract:" + bd3.subtract(bd4));//subtract:0.68

System.out.println("-------------------");

BigDecimal bd5 = new BigDecimal("1.015");

BigDecimal bd6 = new BigDecimal("100");

System.out.println("multiply:" + bd5.multiply(bd6));//multiply:101.500

System.out.println("-------------------");

BigDecimal bd7 = new BigDecimal("1.301");

BigDecimal bd8 = new BigDecimal("100");

System.out.println("divide:" + bd7.divide(bd8));//divide:0.01301

//四舍五入

System.out.println("divide:"

+ bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP));//保留三位有效数字

//divide:0.013

System.out.println("divide:"

+ bd7.divide(bd8, 8, BigDecimal.ROUND_HALF_UP));//保留八位有效数字

//divide:0.01301000

}

BigInteger

BigInteger:可以让超过Integer范围内的数据进行运算

public static void main(String[] args) {

Integer num = new Integer("2147483647");

System.out.println(num);

//Integer num2 = new Integer("2147483648");

// Exception in thread "main" java.lang.NumberFormatException: For input string: "2147483648"

//System.out.println(num2);

// 通过 BigIntege来创建对象

BigInteger num2 = new BigInteger("2147483648");

System.out.println(num2);

}

BigInteger的常用成员方法:

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)//返回商和余数的数组

使用实例:

public class BigIntegerDemo {

public static void main(String[] args) {

Integer num = new Integer("2147483647");

System.out.println(num);

//Integer num2 = new Integer("2147483648");

// Exception in thread "main" java.lang.NumberFormatException: For input string: "2147483648"

//System.out.println(num2);

// 通过 BigIntege来创建对象

BigInteger num2 = new BigInteger("2147483648");

System.out.println(num2);

}

}

public class BigIntegerDemo2 {

public static void main(String[] args) {

BigInteger bi1 = new BigInteger("100");

BigInteger bi2 = new BigInteger("50");

// public BigInteger add(BigInteger val):加

System.out.println("add:" + bi1.add(bi2)); //add:150

// public BigInteger subtract(BigInteger Val):减

System.out.println("subtract:" + bi1.subtract(bi2));//subtract:50

// public BigInteger multiply(BigInteger val):乘

System.out.println("multiply:" + bi1.multiply(bi2));//multiply:5000

// public BigInteger divide(BigInteger val):除

System.out.println("divide:" + bi1.divide(bi2));//divide:2

// public BigInteger[] divideAndRemainder(BigInteger val):返回商和余数的数组

BigInteger[] bis = bi1.divideAndRemainder(bi2);

System.out.println("divide:" + bis[0]);//divide:2

System.out.println("remainder:" + bis[1]);//remainder:0

}

}

Calendar

Calendar为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,

并为操作日历字段(例如获得下星期的日期)提供了一些方法。

Calendar中常用的方法:

public int get(int field) //返回给定日历字段的值。日历类中的每个日历字段都是静态的成员变量,并且是int类型。

public void add(int field,int amount)//根据给定的日历字段和对应的时间,来对当前的日历进行操作。

public final void set(int year,int month,int date)//设置当前日历的年月日

使用示例:

public class CalendarDemo {

public static void main(String[] args) {

// 其日历字段已由当前日期和时间初始化:

Calendar rightNow = Calendar.getInstance(); // 子类对象

int year=rightNow.get(Calendar.YEAR);

int month=rightNow.get(Calendar.MONTH);//注意月份是从0开始的

int date=rightNow.get(Calendar.DATE);

System.out.println(year + "年" + (month + 1) + "月" + date + "日");

//2018年12月25日

}

}

使用示例2:

public class CalendarDemo2 {

public static void main(String[] args) {

// 其日历字段已由当前日期和时间初始化:

Calendar calendar = Calendar.getInstance(); // 子类对象

System.out.println(getYearMonthDay(calendar));//2018年12月25日

//三年前的今天

calendar.add(Calendar.YEAR,-3);

System.out.println(getYearMonthDay(calendar));//2015年12月25日

//5年后的10天前

calendar.add(Calendar.YEAR,5);

calendar.add(Calendar.DATE,-10);

System.out.println(getYearMonthDay(calendar));//2020年12月15日

//设置 2011年11月11日

calendar.set(2011,10,11);

System.out.println(getYearMonthDay(calendar));//2011年11月11日

}

//获取年、月、日

public static String getYearMonthDay(Calendar calendar){

int year=calendar.get(Calendar.YEAR);

int month=calendar.get(Calendar.MONTH);

int date=calendar.get(Calendar.DATE);

return year + "年" + (month + 1) + "月" + date + "日";

}

}

小练习:获取任意一年的二月有多少天

/**

*获取任意一年的二月有多少天

*分析:

* A:键盘录入任意的年份

* B:设置日历对象的年月日

* 年就是输入的数据

* 月是2

* 日是1

* C:把时间往前推一天,就是2月的最后一天

* D:获取这一天输出即可

*/

public class CalendarTest {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

int year=sc.nextInt();

Calendar c= Calendar.getInstance();

c.set(year,2,1); //得到的就是该年的3月1日

c.add(Calendar.DATE,-1);//把时间往前推一天,就是2月的最后一天

//public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作。

System.out.println(year+"年,二月有"+c.get(Calendar.DATE)+"天");

}

}

Character

Character 类在对象中包装一个基本类型 char 的值.此外,该类提供了几种方法,

以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然。

Character常用方法:

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) //把给定的字符转换为小写字符

使用示例:

public class CharacterDemo {

public static void main(String[] args) {

// public static boolean isUpperCase(char ch):判断给定的字符是否是大写字符

System.out.println("isUpperCase:" + Character.isUpperCase('A'));//true

System.out.println("isUpperCase:" + Character.isUpperCase('a'));//false

System.out.println("isUpperCase:" + Character.isUpperCase('0'));//false

System.out.println("-----------------------------------------");

// public static boolean isLowerCase(char ch):判断给定的字符是否是小写字符

System.out.println("isLowerCase:" + Character.isLowerCase('A'));//false

System.out.println("isLowerCase:" + Character.isLowerCase('a'));//true

System.out.println("isLowerCase:" + Character.isLowerCase('0'));//false

System.out.println("-----------------------------------------");

// public static boolean isDigit(char ch):判断给定的字符是否是数字字符

System.out.println("isDigit:" + Character.isDigit('A'));//false

System.out.println("isDigit:" + Character.isDigit('a'));//false

System.out.println("isDigit:" + Character.isDigit('0'));//true

System.out.println("-----------------------------------------");

// public static char toUpperCase(char ch):把给定的字符转换为大写字符

System.out.println("toUpperCase:" + Character.toUpperCase('A'));//A

System.out.println("toUpperCase:" + Character.toUpperCase('a'));//A

System.out.println("-----------------------------------------");

// public static char toLowerCase(char ch):把给定的字符转换为小写字符

System.out.println("toLowerCase:" + Character.toLowerCase('A'));//a

System.out.println("toLowerCase:" + Character.toLowerCase('a'));//a

}

}

小练习:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)

/**

* 统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)

*

* 分析:

* A:定义三个统计变量。

* int bigCont=0;

* int smalCount=0;

* int numberCount=0;

* B:键盘录入一个字符串。

* C:把字符串转换为字符数组。

* D:遍历字符数组获取到每一个字符

* E:判断该字符是

* 大写bigCount++;

* 小写smalCount++;

* 数字numberCount++;

* F:输出结果即可

*/

public class CharacterTest {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

String str=sc.nextLine();

printCount(str);

printCount2(str);

}

//原来的写法

public static void printCount(String str) {

int numberCount=0;

int lowercaseCount=0;

int upercaseCount=0;

for(int index=0;index

char ch=str.charAt(index);

if(ch>='0' && ch<='9'){

numberCount++;

}else if(ch>='A' && ch<='Z'){

upercaseCount++;

}else if(ch>='a' && ch<='z'){

lowercaseCount++;

}

}

System.out.println("数字有"+numberCount+"个");

System.out.println("小写字母有"+lowercaseCount+"个");

System.out.println("大写字母有"+upercaseCount+"个");

}

//使用包装类来改进

public static void printCount2(String str) {

int numberCount=0;

int lowercaseCount=0;

int upercaseCount=0;

for(int index=0;index

char ch=str.charAt(index);

if(Character.isDigit(ch)){

numberCount++;

}else if(Character.isUpperCase(ch)){

upercaseCount++;

}else if(Character.isLowerCase(ch)){

lowercaseCount++;

}

}

System.out.println("数字有"+numberCount+"个");

System.out.println("小写字母有"+lowercaseCount+"个");

System.out.println("大写字母有"+upercaseCount+"个");

}

}

Data_DateFormat

Date:表示特定的瞬间,精确到毫秒。

Date常用成员方法:

Date() //根据当前的默认毫秒值创建日期对象

Date(long date) //根据给定的毫秒值创建日期对象

public long getTime() //获取时间,以毫秒为单位

public void setTime(long time) //设置时间

Date使用示例:

/**

* 把一个毫秒值转换为Date,有两种方式:

* (1)构造方法

* (2)setTime(long time)

*/

public class DateDemo {

public static void main(String[] args) {

// Date():根据当前的默认毫秒值创建日期对象

Date d = new Date();

System.out.println("d:" + d);

//d:Tue Dec 25 20:01:17 GMT+08:00 2018 --> 当前时间

// Date(long date):根据给定的毫秒值创建日期对象

//long time = System.currentTimeMillis();

long time = 1000 * 60 * 60; // 1小时

Date d2 = new Date(time);

System.out.println("d2:" + d2);

//格林威治时间 1970年01月01日00时00分00

//Thu Jan 01 09:00:00 GMT+08:00 1970 GMT+表示 标准时间加8小时,因为中国是东八区

// 获取时间

long time2 = d.getTime();

System.out.println(time2); //1545739438466 毫秒

System.out.println(System.currentTimeMillis());

// 设置时间

d.setTime(1000*60*60);

System.out.println("d:" + d);

//Thu Jan 01 09:00:00 GMT+08:00 1970

}

}

DateForamt:可以进行日期和字符串的格式化和解析,但是由于是抽象类,所以使用具体子类SimpleDateFormat。

SimpleDateFormat的构造方法:

SimpleDateFormat() //默认模式

SimpleDateFormat(String pattern) //给定的模式

这个模式字符串该如何写呢? 通过查看API,我们就找到了对应的模式:

中文说明

模式字符

y

M

d

H

m

s

Date类型和String类型的相互转换

public class DateFormatDemo {

public static void main(String[] args) {

Date date=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");

String s=dateToString(date,sdf);

System.out.println(s); //2018年12月25日

System.out.println(stringToDate(s,sdf));//Tue Dec 25 00:00:00 GMT+08:00 2018

}

/**

* Date -- String(格式化)

* public final String format(Date date)

*/

public static String dateToString(Date d, SimpleDateFormat sdf) {

return sdf.format(d);

}

/**

* * String -- Date(解析)

* public Date parse(String source)

*/

public static Date stringToDate(String s, SimpleDateFormat sdf){

Date date=null;

try {

date=sdf.parse(s);

} catch (ParseException e) {

e.printStackTrace();

}

return date;

}

}

小练习: 算一下你来到这个世界多少天?

/**

* *

* 算一下你来到这个世界多少天?

*

* 分析:

* A:键盘录入你的出生的年月日

* B:把该字符串转换为一个日期

* C:通过该日期得到一个毫秒值

* D:获取当前时间的毫秒值

* E:用D-C得到一个毫秒值

* F:把E的毫秒值转换为年

* /1000/60/60/24

*/

public class DateTest {

public static void main(String[] args) throws ParseException {

// 键盘录入你的出生的年月日

Scanner sc = new Scanner(System.in);

System.out.println("请输入你的出生年月日(格式 yyyy-MM-dd):");

String line = sc.nextLine();

// 把该字符串转换为一个日期

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Date d = sdf.parse(line);

long birth=d.getTime(); //出生的时间

long current=System.currentTimeMillis();//当前时间

long days=(current-birth)/1000/60/60/24;

System.out.println("你出生了"+days+"天");

}

}

Integer

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) //注意:这个字符串必须是由数字字符组成

int和String的相互转化:

String.valueOf(number) //int --> String

Integer.parseInt(s) //String --> int

public static void main(String[] args) {

System.out.println(intToString(100)); //100

System.out.println(stringToInt("100")); //100

}

//int --> String

public static String intToString(int number) {

//方式一

/*String strNumber=""+number;

return strNumber;*/

//方式二

String strNumber=String.valueOf(number);

return strNumber;

}

//String --> int

public static int stringToInt(String strNumber) {

//方式一

/*Integer number=new Integer(strNumber);

return number;*/

//方式二

Integer number=Integer.parseInt(strNumber);

return number;

}

常用的进制转换:

//常用的基本进制转换

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(10个数字+26个字母)

//其他进制到十进制

public static int parseInt(String s,int radix)

public class IntegerDemo3 {

public static void main(String[] args) {

//test();

//test2();

test3();

}

//常用的基本进制转换

public static void test(){

System.out.println(Integer.toBinaryString(100));//1100100

System.out.println(Integer.toOctalString(100));//144

System.out.println(Integer.toHexString(100));//64

System.out.println("-----------------------------");

}

//十进制到其他进制

public static void test2(){

System.out.println(Integer.toString(100, 10));//100

System.out.println(Integer.toString(100, 2));//1100100

System.out.println(Integer.toString(100, 8));//144

System.out.println(Integer.toString(100, 16));//64

System.out.println(Integer.toString(100, 5));//400

System.out.println(Integer.toString(100, 7));//202

//进制的范围在2-36之间,超过这个范围,就作为十进制处理

System.out.println(Integer.toString(100, -7)); //100

System.out.println(Integer.toString(100, 70));//100

System.out.println(Integer.toString(100, 1));//100

System.out.println(Integer.toString(100, 37));//100

System.out.println(Integer.toString(100, 17));//5f

System.out.println(Integer.toString(100, 32));//34

System.out.println(Integer.toString(100, 36));//2s

System.out.println("-------------------------");

}

//任意进制转换为十进制

public static void test3(){

System.out.println(Integer.parseInt("100", 10));//100

System.out.println(Integer.parseInt("100", 2));//4

System.out.println(Integer.parseInt("100", 8));//64

System.out.println(Integer.parseInt("100", 16));//256

System.out.println(Integer.parseInt("100", 23));//529

//NumberFormatException,因为二进制是不可能存在 123的

//System.out.println(Integer.parseInt("123", 2));

}

}

JDK5的新特性

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

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

public class IntegerDemo4 {

public static void main(String[] args) {

Integer num=null;

if(num!=null){

num+=100;

System.out.println(num);

}

test(); //num:200

test2(); //num:200

}

//自动装箱,拆箱

public static void test() {

Integer num=100;

//自动装箱,实际上就是 Integer num=Integer.valueOf(100)

num+=100;

//先拆箱再装箱 num.intValue()+100=200 --> Integer num=Integer.valueOf(num.intValue()+100)

System.out.println(new StringBuilder("num:").append(num).toString());

}

//手动拆装箱

public static void test2() {

Integer num=Integer.valueOf(100); //手动装箱

num=Integer.valueOf(num.intValue()+100); //先手动拆箱,进行运算后,再手动装箱

System.out.println(new StringBuilder("num:").append(num).toString());

}

}

小练习:看程序写结果

public class IntegerTest {

public static void main(String[] args) {

Integer i1 = new Integer(127);

Integer i2 = new Integer(127);

System.out.println(i1 == i2);

System.out.println(i1.equals(i2));

System.out.println("-----------");

Integer i3 = new Integer(128);

Integer i4 = new Integer(128);

System.out.println(i3 == i4);

System.out.println(i3.equals(i4));

System.out.println("-----------");

Integer i5 = 128;

Integer i6 = 128;

System.out.println(i5 == i6);

System.out.println(i5.equals(i6));

System.out.println("-----------");

Integer i7 = 127;

Integer i8 = 127;

System.out.println(i7 == i8);

System.out.println(i7.equals(i8));

}

}

输出结果:

false

true

-----------

false

true

-----------

false

true

-----------

true

true

分析:

Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据。

通过查看源码,针对-128到127之间的数据,做了一个数据缓冲池IntegerCache,

如果数据是该范围内的,每次并不创建新的空间。

public static Integer valueOf(int i) {

if (i >= IntegerCache.low && i <= IntegerCache.high)

return IntegerCache.cache[i + (-IntegerCache.low)];

return new Integer(i);

}

private static class IntegerCache {

static final int low = -128; //low=-128

static final int high;

static final Integer cache[];

static {

// high value may be configured by property

int h = 127;

//...

}

high = h; //high=127

Object

Object类是类层次结构的根类。每个类都使用 Object 作为超类。每个类都直接或者间接的继承自Object类。

Object类的方法:

public int hashCode() //返回该对象的哈希码值。

// 注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值。

public final Class getClass() //返回此 Object 的运行时类

public String toString() //返回该对象的字符串表示。

protected Object clone() //创建并返回此对象的一个副本。可重写该方法

protected void finalize()

//当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回收,但是什么时候回收不确定。

Scanner

Scanner:用于接收键盘录入数据。

使用Scanner三部曲:

A:导包

B :创建对象

C :使用相应方法

Scanner常用成员方法

Scanner(InputStream source) //构造方法

public boolean hasNextXxx() //判断是否是某种类型的元素,Xxx表示类型,比如 public boolean hasNextInt()

public Xxx nextXxx() //获取该元素,Xxx表示类型,比如public int nextInt()

注意:InputMismatchException:表示输入的和你想要的不匹配

使用示例1:

public class ScannerDemo {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

if(sc.hasNextInt()){

int x=sc.nextInt();

System.out.println("x="+x);

}else{

System.out.println("输入的数据有误");

}

}

}

先获取一个数值,换行后,再获取一个字符串,会出现问题。主要原因:就是换行符号的问题。如何解决呢?

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

//输入 12 换行后在输出 "sss"

int x=sc.nextInt();

System.out.println("x:"+x); //x:12

String line=sc.nextLine(); //这里会有问题 因为会将换行符当作字符输输入

System.out.println("line:"+line); //line:

}

解决方案一:先获取一个数值后,再创建一个新的键盘录入对象获取字符串。

public static void method() {

Scanner sc=new Scanner(System.in);

int x=sc.nextInt();

System.out.println("x:"+x);

Scanner sc2=new Scanner(System.in);

String line=sc2.nextLine();

System.out.println("line:"+line);

}

解决方案二:把所有的数据都先按照字符串获取,然后要什么,就进行相应的转换。

public static void method2() {

Scanner sc=new Scanner(System.in);

String xStr=sc.nextLine();

String line=sc.nextLine();

int x=Integer.parseInt(xStr);

System.out.println("x:"+x);

System.out.println("line:"+line);

}

String

字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。

String的构造方法方法:

//String的构造方法

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) //把字符串常量值转成字符串

public class StringDemo {

public static void main(String[] args) {

//public String():空构造

String s=new String();

System.out.println("s:"+s);

System.out.println("s.length="+s.length());

System.out.println("-----------------------");

//public String(byte[] bytes):把字节数组转成字符串

byte[] bys={97,98,99,100,101};

String s2=new String(bys);

System.out.println("s2:"+s2);

System.out.println("s2.length="+s2.length());

System.out.println("-----------------------");

//public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串

String s3=new String(bys,0,3); //从0位置开始,3个字符

System.out.println("s3:"+s3);//s3:abc

System.out.println("s3.length="+s3.length());//s3.length=3

System.out.println("-----------------------");

//public String(char[] value):把字符数组转成字符串

char[] chs={'a','b','c','d','e'};

String s4=new String(chs); //从0位置开始,3个字符

System.out.println("s4:"+s4);

System.out.println("s4.length="+s4.length());

System.out.println("-----------------------");

//public String(char[] value,int index,int count):把字符数组的一部分转成字符串

String s5=new String(chs,0,3); //从0位置开始,3个字符

System.out.println("s5:"+s5);

System.out.println("s5.length="+s5.length());

System.out.println("-----------------------");

//public String(String original):把字符串常量值转成字符串

String s6=new String("abcde");

System.out.println("s6:"+s6);

System.out.println("s6.length="+s6.length());

}

}

字符串的特点:一旦被赋值,就不能改变

public static void test() {

String s = "hello";

s += "world";

System.out.println("s:" + s); // helloworld

}

小练习:看程序,写结果:

public static void test2(){

String s1 = new String("hello");

String s2 = new String("hello");

System.out.println(s1 == s2);

System.out.println(s1.equals(s2));

String s3 = new String("hello");

String s4 = "hello";

System.out.println(s3 == s4);

System.out.println(s3.equals(s4));

String s5 = "hello";

String s6 = "hello";

System.out.println(s5 == s6);

System.out.println(s5.equals(s6));

}

输出结果:

false

true

false

true

true

true

分析:

=和qeuals的区别

==:比较引用类型,比较的是地址值是否相同

equals:比较引用类型,默认也是比较地址值是否相同

String类重写了equals()方法,比较的是内容是否相同。

String s = new String(“hello”)和String s = “hello”的区别?

前者会创建2个对象,后者创建1个对象。更具体的说,前者会创建2个或者1个对象,后者会创建1个或者0个对象。

String类的判断功能:

boolean equals(Object obj) //比较字符串的内容是否相同,区分大小写

boolean equalsIgnoreCase(String str) //比较字符串的内容是否相同,忽略大小写

boolean contains(String str) //判断大字符串中是否包含小字符串

boolean startsWith(String str) //判断字符串是否以某个指定的字符串开头

boolean endsWith(String str) //判断字符串是否以某个指定的字符串结尾

boolean isEmpty()// 判断字符串是否为空

注意:字符串内容为空和字符串对象为空。

String s = "";//字符串内容为空

String s = null;//字符串对象为空

public class StringDemo3 {

public static void main(String[] args) {

// 创建字符串对象

String s1 = "helloworld";

String s2 = "helloworld";

String s3 = "HelloWorld";

// boolean equals(Object obj):比较字符串的内容是否相同,区分大小写

System.out.println("equals:" + s1.equals(s2));//true

System.out.println("equals:" + s1.equals(s3));//false

System.out.println("-----------------------");

// boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写

System.out.println("equals:" + s1.equalsIgnoreCase(s2));//true

System.out.println("equals:" + s1.equalsIgnoreCase(s3));//true

System.out.println("-----------------------");

// boolean contains(String str):判断大字符串中是否包含小字符串

System.out.println("contains:" + s1.contains("hello"));//true

System.out.println("contains:" + s1.contains("hw"));//false

System.out.println("-----------------------");

// boolean startsWith(String str):判断字符串是否以某个指定的字符串开头

System.out.println("startsWith:" + s1.startsWith("h"));//true

System.out.println("startsWith:" + s1.startsWith("hello"));//true

System.out.println("startsWith:" + s1.startsWith("world"));//false

System.out.println("-----------------------");

//boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾

System.out.println("startsWith:" + s1.endsWith("d"));//true

System.out.println("startsWith:" + s1.endsWith("world"));//true

System.out.println("startsWith:" + s1.endsWith("hello"));//false

System.out.println("-----------------------");

// boolean isEmpty():判断字符串是否为空。

System.out.println("isEmpty:" + s1.isEmpty());//false

String s4 = ""; //字符串内容为空

String s5 = null;//字符串对象为空

System.out.println("isEmpty:" + s4.isEmpty());//true

// NullPointerException

// s5对象都不存在,所以不能调用方法,空指针异常

//System.out.println("isEmpty:" + s5.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) //从指定位置开始截取字符串,默认到末尾。

String substring(int start,int end) //从指定位置开始到指定位置结束截取字符串。左闭右开

public class StringDemo4 {

public static void main(String[] args) {

// 定义一个字符串对象

String s = "helloworld";

// int length():获取字符串的长度。

System.out.println("s.length:" + s.length());//10

System.out.println("----------------------");

// char charAt(int index):获取指定索引位置的字符

System.out.println("charAt:" + s.charAt(7));//r

System.out.println("----------------------");

// int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。

System.out.println("indexOf:" + s.indexOf('l'));//2

System.out.println("----------------------");

// int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。

System.out.println("indexOf:" + s.indexOf("owo"));//4

System.out.println("----------------------");

// int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。

System.out.println("indexOf:" + s.indexOf('l', 4));//8

System.out.println("indexOf:" + s.indexOf('k', 4)); // -1

System.out.println("indexOf:" + s.indexOf('l', 40)); // -1

System.out.println("----------------------");

// int indexOf(String str,intfromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。

System.out.println("indexOf:" + s.indexOf("owo", 4));//4

System.out.println("indexOf:" + s.indexOf("ll", 4)); //-1

System.out.println("indexOf:" + s.indexOf("ld", 40)); // -1

System.out.println("----------------------");

// String substring(int start):从指定位置开始截取字符串,默认到末尾。包含start这个索引

System.out.println("substring:" + s.substring(5));//world

System.out.println("substring:" + s.substring(0));//helloworld

System.out.println("----------------------");

// String substring(int start,int

// end):从指定位置开始到指定位置结束截取字符串。包括start索引但是不包end索引

System.out.println("substring:" + s.substring(3, 8));//lowor

System.out.println("substring:" + s.substring(0, s.length()));//helloworld

/**

* 获取 字符串中的每个字符

*/

for(int i=0;i

System.out.println(s.charAt(i));

}

}

}

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) //把字符串拼接。

public class StringDemo5 {

public static void main(String[] args) {

// 定义一个字符串对象

String s = "JavaSE";

// byte[] getBytes():把字符串转换为字节数组。

byte[] bys = s.getBytes();

for (int x = 0; x < bys.length; x++) {

System.out.println(bys[x]);//74 97 118 97 83 69

}

System.out.println("----------------");

// char[] toCharArray():把字符串转换为字符数组。

char[] chs = s.toCharArray();

for (int x = 0; x < chs.length; x++) {

System.out.println(chs[x]);//J a v a S E

}

System.out.println("----------------");

// static String valueOf(char[] chs):把字符数组转成字符串。

String ss = String.valueOf(chs);

System.out.println(ss);//JavaSE

System.out.println("----------------");

// static String valueOf(int i):把int类型的数据转成字符串。

int i = 100;

String sss = String.valueOf(i);

System.out.println(sss);//100 是字符串

System.out.println("----------------");

// String toLowerCase():把字符串转成小写。

System.out.println("toLowerCase:" + s.toLowerCase());//javase

System.out.println("s:" + s);

// System.out.println("----------------");

// String toUpperCase():把字符串转成大写。

System.out.println("toUpperCase:" + s.toUpperCase());//JAVASE

System.out.println("----------------");

// String concat(String str):把字符串拼接。

String s1 = "hello";

String s2 = "world";

String s3 = s1 + s2;

String s4 = s1.concat(s2);

System.out.println("s3:"+s3);//helloworld

System.out.println("s4:"+s4);//helloworld

}

}

练习:将一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)

/**

* 需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)

* 举例:

* helloWORLD

* 结果:

* Helloworld

*

* A:先获取第一个字符

* B:获取除了第一个字符以外的字符

* C:把A转成大写

* D:把B转成小写

* E:C拼接D

*/

public class StringTest {

public static void main(String[] args) {

String str="helloWORLD";

str=str.substring(0,1).toUpperCase().

concat(str.substring(1).toLowerCase());

System.out.println(str);

}

}

String类的其他功能:

//替换功能:

String replace(char old,char new)

String replace(String old,String new)

//去除字符串两端空格

String trim()

//按字典顺序比较两个字符串

int compareTo(String str)

int compareToIgnoreCase(String str)

compareTo()方法源码解析

private final char value[]; //字符串会自动转换为一个字符数组。

/**

* 举例

String s6 = "hello";

String s9 = "xyz";

System.out.println(s6.compareTo(s9));// -16

*/

public int compareTo(String anotherString) {

int len1 = value.length;

int len2 = anotherString.value.length;

int lim = Math.min(len1, len2); //lim=3

char v1[] = value; //v1[h e l l o]

char v2[] = anotherString.value;//v2[x y z]

int k = 0;

while (k < lim) {

char c1 = v1[k];//h

char c2 = v2[k];//x

if (c1 != c2) { //先比较的是对应的字符是否相等

return c1 - c2; //h=104 x=120 104-120=-16

}

k++;

}

//如果在指定位置,字符都相同,则长度相减

return len1 - len2;

}

练习1:把数组中的数据按照指定个格式拼接成一个字符串。举例:int[] arr = {1,2,3};输出结果:[1, 2, 3]

/**

*

* 需求:把数组中的数据按照指定个格式拼接成一个字符串

* 举例:

* int[] arr = {1,2,3};

* 输出结果:

*"[1, 2, 3]"

* 分析:

* A:定义一个字符串对象,只不过内容为空

* B:先把字符串拼接一个"["

* C:遍历int数组,得到每一个元素

* D:先判断该元素是否为最后一个

* 是:就直接拼接元素和"]"

* 不是:就拼接元素和逗号以及空格

* E:输出拼接后的字符串

*/

public class StringTest2 {

public static void main(String[] args) {

int[] arr={1,2,3,4};

System.out.println(arrayToString(arr));

}

/**

* 把数组中的数据按照指定个格式拼接成一个字符串

*/

public static String arrayToString(int[] arr){

String str="[";

for(int i=0;i

if(i==arr.length-1){

str+=arr[i];

}else{

str+=arr[i]+",";

}

}

str+="]";

return str;

}

}

练习2:统计大串中小串出现的次数

/**

* 统计大串中小串出现的次数

* 举例:

* 在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun"

* 结果:

* java出现了5次

*

* 分析:

* 前提:是已经知道了大串和小串。

* A:定义一个统计变量,初始化值是0

* B:先在大串中查找一次小串第一次出现的位置 ( boolean contains(String str):判断大字符串中是否包含小字符串)

* a:索引是-1,说明不存在了,就返回统计变量

* b:索引不是-1,说明存在,统计变量++

* C:把刚才的索引+小串的长度作为开始位置截取上一次的大串,返回一个新的字符串,并把该字符串的值重新赋值给大串

* D:回到B

*/

public class StringTest3 {

public static void main(String[] args) {

String s1="woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";

String s2="java";

System.out.println(smallCount(s2,s1));

}

// 统计大串中小串出现的次数

public static int smallCount(String smallStr,String bigStr) {

int count=0;

int index=bigStr.indexOf(smallStr);

while(index!=-1){

count++;

//把刚才的索引+小串的长度作为开始位置截取上一次的大串

int startIndex=index+smallStr.length();

bigStr=bigStr.substring(startIndex);

index=bigStr.indexOf(smallStr);

}

return count;

}

}

StringBuffer

StringBuffer的常用成员方法:

//StirngBuffer的构造方法

public StringBuffer() //无参构造方法

public StringBuffer(int capacity) //指定容量的字符串缓冲区对象

public StringBuffer(String str) //指定字符串内容的字符串缓冲区对象

//StringBuffer的方法

public int capacity() //返回当前容量。理论值

public int length() //返回长度(字符数)。 实际值

public static void main(String[] args) {

// public StringBuffer():无参构造方法

StringBuffer sb = new StringBuffer();

System.out.println("sb:" + sb);

System.out.println("sb.capacity():" + sb.capacity()); //StringBuffer默认的指定容量是16

System.out.println("sb.length():" + sb.length());//0

System.out.println("--------------------------");

// public StringBuffer(int capacity):指定容量的字符串缓冲区对象

StringBuffer sb2 = new StringBuffer(50);

System.out.println("sb2:" + sb2);//""

System.out.println("sb2.capacity():" + sb2.capacity());//50

System.out.println("sb2.length():" + sb2.length());//0

System.out.println("--------------------------");

// public StringBuffer(String str):指定字符串内容的字符串缓冲区对象

StringBuffer sb3 = new StringBuffer("hello");

System.out.println("sb3:" + sb3);//hello

System.out.println("sb3.capacity():" + sb3.capacity());//16+5=21

System.out.println("sb3.length():" + sb3.length());//5

}

StringBuffer的添加功能:

public StringBuffer append(String str) //可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身

public StringBuffer insert(int offset,String str) //在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

public static void main(String[] args) {

// 创建字符串缓冲区对象

StringBuffer sb = new StringBuffer();

// 链式编程

sb.append("hello").append(true).append(12).append(34.56);

System.out.println("sb:" + sb);

// public StringBuffer insert(int offset,String

// str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

sb.insert(5, "world");

System.out.println("sb:" + sb);

}

StringBuffer的删除功能

public StringBuffer deleteCharAt(int index) //删除指定位置的字符,并返回本身

public StringBuffer delete(int start,int end) //删除从指定位置开始指定位置结束的内容,并返回本身

public static void main(String[] args) {

// 创建对象

StringBuffer sb = new StringBuffer();

// 添加功能

sb.append("hello").append("world").append("java");

// public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身

// 需求:我要删除e这个字符,肿么办?

//sb.deleteCharAt(1);

//public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身

// 需求:我要删除world这个字符串,肿么办?

//sb.delete(5, 10);

//需求:删除所有字符

sb.delete(0,sb.length());

System.out.println("sb:" + sb);

}

StringBuffer的替换功能

public StringBuffer replace(int start,int end,String str) //从start开始到end用str替换

public static void main(String[] args) {

// 创建字符串缓冲区对象

StringBuffer sb = new StringBuffer();

// 添加数据

sb.append("hello");

sb.append("world");

sb.append("java");

System.out.println("sb:" + sb);

// public StringBuffer replace(int start,int end,String str):从start开始到end用str替换

// 需求:我要把world这个数据替换为"节日快乐"

sb.replace(5,10,"节日快乐");

System.out.println("sb:"+sb);

}

StringBuffer的反转功能:

public StringBuffer reverse()

public static void main(String[] args) {

// 创建字符串缓冲区对象

StringBuffer sb = new StringBuffer();

// 添加数据

sb.append("霞青林爱我");

System.out.println("sb:" + sb);//霞青林爱我

// public StringBuffer reverse()

sb.reverse();

System.out.println("sb:" + sb);//我爱林青霞

}

StringBuffer的截取功能:

public String substring(int start) //TODO:注意截取返回的是String,而不是StringBuffer了

public String substring(int start,int end)

public static void main(String[] args) {

// 创建字符串缓冲区对象

StringBuffer sb = new StringBuffer();

// 添加元素

sb.append("hello").append("world").append("java");

System.out.println("sb:" + sb);//sb:helloworldjava

// 截取功能

// public String substring(int start)

String s = sb.substring(5);

System.out.println("s:" + s);//s:worldjava

System.out.println("sb:" + sb);//sb:helloworldjava

// public String substring(int start,int end)

String ss = sb.substring(5, 10);//左闭右开

System.out.println("ss:" + ss);//ss:world

System.out.println("sb:" + sb);//sb:helloworldjava

}

String和StringBuffer的相互转换:

public class StringBufferDemo7 {

public static void main(String[] args) {

String s="hello";

System.out.println(stringToStringBuffer(s)); //hello

System.out.println(stringBufferToString(stringToStringBuffer(s)));//hello

}

// String -->StringBuffer

public static StringBuffer stringToStringBuffer(String s) {

// 注意:不能把字符串的值直接赋值给StringBuffer

// StringBuffer sb = "hello";

// StringBuffer sb = s;

// 方式1:通过构造方法

/* StringBuffer sb = new StringBuffer(s);

return sb;*/

// 方式2:通过append()方法

StringBuffer sb2 = new StringBuffer();

sb2.append(s);

return sb2;

}

//StringBuffer -->String

public static String stringBufferToString(StringBuffer buffer){

// 方式1:通过构造方法

/* String str = new String(buffer);

return str;*/

// 方式2:通过toString()方法

String str2 = buffer.toString();

return str2;

}

}

练习1:将数组拼接成一个字符串

public class StringBufferTest {

public static void main(String[] args) {

int[] arr={1,2,3,4};

System.out.println(arrToString(arr));//[1,2,3,4]

}

public static String arrToString(int[] arr){

StringBuffer buffer=new StringBuffer();

buffer.append("[");

for(int i=0;i

if(i==arr.length-1){

buffer.append(arr[i]);

}else{

buffer.append(arr[i]).append(",");

}

}

buffer.append("]");

return buffer.toString();

}

}

练习2:判断一个字符串是否是对称字符串

/**

* 判断一个字符串是否是对称字符串

* 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串

*

* 分析:

* 判断一个字符串是否是对称的字符串,我只需要把

* 第一个和最后一个比较

* 第二个和倒数第二个比较

* ...

* 比较的次数是长度除以2。

*/

public class StringBufferTest2 {

public static void main(String[] args) {

System.out.println(isSymmetry("aba")); //true

System.out.println(isSymmetry2("aabbaa"));//true

}

//通过字符数组的方式来比较

public static boolean isSymmetry(String s){

boolean flag=true;

char[] chs=s.toCharArray();

int len=chs.length;

for(int start=0,end=chs.length-1;start<=end;start++,end--){

if(chs[start]!=chs[end]){

flag=false;

break;

}

}

return flag;

}

//通过StringBuffer的reverse

public static boolean isSymmetry2(String s){

//通过StringBuffer的reverse获取反转字符串s2

String s2=new StringBuffer(s).reverse().toString();

return s2.equals(s);

}

}

练习3:看程序写结果

public class StringBufferTest3 {

public static void main(String[] args) {

String s1 = "hello";

String s2 = "world";

System.out.println(s1 + "---" + s2);

change(s1, s2);

System.out.println(s1 + "---" + s2);

StringBuffer sb1 = new StringBuffer("hello");

StringBuffer sb2 = new StringBuffer("world");

System.out.println(sb1 + "---" + sb2);

change(sb1, sb2);

System.out.println(sb1 + "---" + sb2);

}

//StringBuffer作为参数传递

public static void change(StringBuffer sb1, StringBuffer sb2) {

sb1 = sb2;

sb2.append(sb1);

}

//String作为参数传递

public static void change(String s1, String s2) {

s1 = s2;

s2 = s1 + s2;

}

}

输出结果:

hello---world

hello---world

hello---world

hello---worldworld

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

java常见对象_Java/10_Java常见对象.md at master · DuHouAn/Java · GitHub相关推荐

  1. java反射 enum参数_CookBook/3-Java反射.md at master · Byron4j/CookBook · GitHub

    Java核心(三)反射 Java反射给我们提供了在运行时检查甚至修改应用行为的机制. 反射是java高级的核心技术,所有有经验的程序员都应该理解. 通过反射机制,我们可以在运行时检视 类.接口.枚举, ...

  2. 安卓java电脑编写程序esil_CTF-All-In-One/2.5_radare2.md at master · ychcqshan/CTF-All-In-One · GitHub...

    2.5 Radare2 简介 IDA Pro 昂贵的价格令很多二进制爱好者望而却步,于是在开源世界中催生出了一个新的逆向工程框架--Radare2,它拥有非常强大的功能,包括反汇编.调试.打补丁.虚拟 ...

  3. java中pagex_Java/5_get和post比较.md at master · zaoshangyaochifan/Java · GitHub

    #九.GET 和 POST 比较 Http报文层面: 作用 GET 用于获取资源,而 POST 用于传输实体主体. 参数 GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字 ...

  4. java类与对象_Java类与对象

    类与对象 1,面向对象编程简介 Java语言最大的特点在于面向对象的编程设计,并且面向对象的编程设计也在由于Java自身的发展而不断发展.面向过程编程(C语言).函数式编程(Scala).面向对象编程 ...

  5. java逸出_Java并发编程 - 对象的共享

    编写正确的并发程序,关键问题在于:在访问共享的可变状态时需要进行正确的管理.同步代码块和同步方法可以确保以原子的方式执行操作,同步还有另一个重要的方面:内存可见性. 可见性 为了确保多个线程之间对内存 ...

  6. java常用方法名_Java语言常见名称有哪些

    Java语言常见名称有哪些 java号称是最强的网络编程语言,那么,Java语言常见名称有哪些?一起来看看. Layout managers布局管理器:布局管理器是一些用来负责处理容器中的组件布局排列 ...

  7. java 字符串掐头去尾_java中常见的类

    简介 类层次结构最顶层的基类,所有类都直接或间接继承自Object类,所以,所有的类都是以恶个Object(对象) 构造方法 Object: 构造一个对象,所有子类初始化时都会优先调用该方法 常用的成 ...

  8. 什么是java的关键字_java中常见的关键字

    什么是关键字呢? 概述:关键字就是在java语言中赋予特殊含义的单词 特点:1.组成的关键字的单词全是小写 2.常见的代码编辑器中,对关键字都有特殊的颜色标记 比如在idea中对关键字都有特殊的颜色标 ...

  9. java反射克隆对象_Java反射 - 2(对象复制,父类域,内省)

    为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...

最新文章

  1. 数学的关键是概念而非技巧
  2. 几个C++问题提示的莫名其妙,附录解决方法
  3. ACM图灵奖获得者:想从大数据中获益,先解决集成问题!
  4. Ubuntu 14.04下java开发环境的搭建--2--Eclipse的安装
  5. Solaris底下配置samba
  6. Rigidbody.Is Kinematic和碰撞体
  7. Minimum Path Sum,最短路径问题,动态规划
  8. 【干货】产品经理必读:app开发版本迭代的节奏该如何把握?
  9. 爬取虎扑NBA首页主干道推荐贴的一只小爬虫,日常爬不冷笑话解闷
  10. 快速列出所有字段_快速掌握目标课题的研究现状 | 应用实例
  11. 配置apache密码认证
  12. oracle用UNION-ALL 替换UNION ( 如果有可能的话)
  13. 西方新冠疫苗有效率的数据
  14. Python 用一行代码完成词频统计与分析,词频分析如此简单
  15. 电子地图“顽疾”难治,会“传染”自动驾驶专用高精地图吗?
  16. OpenCV4学习笔记(59)——高动态范围(HDR)成像
  17. codecombat计算机科学入门二(python)
  18. 1U,2U,3U,4U机箱面板,U的含义
  19. [精简]托福核心词汇29
  20. 西电计算机考研历年分数线,西安电子科技大学研究生,西电历年考研分数线?...

热门文章

  1. 使用单片机对STC8G,8H,8A进行ISP下载程序
  2. 测试可编程波形发生器 AD9833
  3. python flask跨域_Ajax与Flask传值的跨域问题
  4. 软raid1 重新同步_盾构同步注浆施工,看完你就会!
  5. Android 读取xml转json,将XML转换为Android中的JSON对象
  6. currency类型_让我们一起走进VBA基本语法的世界,先了解一下数据类型有哪些
  7. 混合app用百分比还是rem_一次搞懂前端所有CSS长度单位,px、em、rem、rpx、%....
  8. VMTK学习——02.基本的PYPES教程
  9. 半导体基础知识(1):材料和器件
  10. 减少亚稳态导致错误,提高系统的MTBF