java中的一些概念总结.docx
- 文档编号:3195044
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:105
- 大小:48.73KB
java中的一些概念总结.docx
《java中的一些概念总结.docx》由会员分享,可在线阅读,更多相关《java中的一些概念总结.docx(105页珍藏版)》请在冰点文库上搜索。
java中的一些概念总结
java中的一些概念总结【学习心得】
【java中的包装类】
什么叫做包装类?
在java的设计中提倡一种思想:
“一切皆对象”,那么这样一来就出现了一个问题?
从数据类型的划分中我们知道java中的数据类型可以分为基本数据类型和引用数据类型,但是基本数据类型怎么能称作是对象呢?
此时我们需要将基本数据类型进行包装,将8种基本数据类型变成一个类的形式,这就是包装类的作用。
例如把int包装成一个类Integer,这样就可以以类的形式操作基本数据类型了。
其中:
Integer、Byte、Float、Double、Short、Long都属于Number类的子类,Number类本身提供了一系列的返回6种基本数据类型的操作。
Character和Boolean是Object类的直接子类。
Number类:
一个抽象类,主要作用是将包装类中的内容变成基本数据类型,主要方法如下:
bytebyteValue()——以byte形式返回指定的数值。
abstract double doubleValue()—— 以double形式返回指定的数值。
abstract floatfloatValue()——以float形式返回指定的数值。
abstract intintValue()—— 以int形式返回指定的数值。
abstract longlongValue()——以long形式返回指定的数值。
short shortValue()——以short形式返回指定的数值。
装箱——将基本数据类型变成包装类
拆箱——将包装类变为基本数据类型
例程1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Demo01 {
public static void main(String[] args) {
int x = 30;//基本数据类型
Integer i = new Integer(x);//装箱——将基本数据类型变成包装类
int temp = i.intValue();//拆箱——将包装类变为基本数据类型
System.out.println(temp);
float y = 30.9f;//基本数据类型
Float f = new Float(y);//装箱——将基本数据类型变成包装类
float tem = f.floatValue();//拆箱——将包装类变为基本数据类型
System.out.println(tem);
boolean b = true;//基本数据类型
Boolean bb = new Boolean(b);//装箱——将基本数据类型变成包装类
boolean t = bb.valueOf(b);//拆箱——将包装类变为基本数据类型
System.out.println(t);
}
}
控制台输出:
30
30.9
true
在JDK1.5之前,对于程序本身来说,包装类是不能进行“+”、“-”……运算,因为那是一个类。
但是在JDK1.5之后对程序的包装类功能进行了改变,增加了自动装箱与拆箱机制,而且也可以使用包装类进行数字运算。
例程2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Demo02 {
public static void main(String[] args) {
Integer ii = 10; //自动装箱为Integer
Float ff = 3.3f; //自动装箱为Float
Boolean boo = false; //自动装箱为Boolean
ii++; //直接对装箱后的类进行操作
ff--;
boo = !
boo;
int xx = ii; //自动拆箱为int
float yy = ff; //自动拆箱为float
boolean bool = boo; //自动拆箱为boolean
System.out.println(xx);
System.out.println(yy);
System.out.println(bool);
}
}
控制台输出:
11
2.3
true
在包装类中还有一个最大的特点:
就是可以将字符串变为指定的数据类型。
例程3:
1
2
3
4
5
6
7
8
9
10
11
public class Demo03 {
public static void main(String[] args) {
String str1 = "99"; //由数字组成的字符串
String str2 = "56.8";
String str3 = "true";
System.out.println(Integer.parseInt(str1));//转化为相应的类型输出
System.out.println(Float.parseFloat(str2));
System.out.println(Boolean.parseBoolean(str3));
}
}
控制台输出:
99
56.8
true
方法的参数或者返回类型也可以设置成响应的包装类。
如下如所示:
2014-12-08
JAVA
1101浏览12回答
最佳回答
2015-09-09
太厉害了,第一天,第一次的心态,基本觉得以后做事的水平了
汤宗
回复 0
_潇潇暮雨 (提问者)
非常感谢!
#12015-09-09 回复
_潇潇暮雨
【Object类】
在java中一切类都是以继承的关系存在的。
现在假设定义了一个Person{}类,如果一个类在定义的时候如果没有默认指明它的继承关系,那么它默认继承Object类,所以Person类的实际代码是:
1
2
3
class Person extends Object{
……
}
Object类是所有类的父类。
Object类的构造方法:
publicObject()
Object类中的3个主要方法:
publicbooleanequals(Objectobj)——对象比较
publicinthashCode()——取得hash码
publicStringtoString()——对象打印时调用
一个完整的类在定义的时候应该重写Object类中的3个主要方法。
例程一:
toString方法的使用
1
2
3
4
5
6
7
8
9
class Demo{ // 定义Demo类,实际上就是继承了Object类
};
public class ObjectDemo01{
public static void main(String args[]){
Demo d = new Demo() ; // 实例化Demo对象
System.out.println("不加toString()输出:
"+d) ;
System.out.println("加上toString()输出:
"+d.toString()) ;
}
};
控制台输出:
不加toString()输出:
gpf.Demo@18f1d7e
加上toString()输出:
gpf.Demo@18f1d7e
由此可见,加与不加toString的结果是一样的,也就证明了对象在打印的时候一定会调用toString()方法,是默认调用的。
那么此时就可以利用此特性完成类中信息的输出。
例程二:
重写toString方法,输出类中的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Person{
private String name ; // 定义name属性
private int age ; // 定义age属性
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
@Override
public String toString(){
return "姓名:
" + this.name + ";年龄:
" + this.age ;
}
};
public class ObjectDemo02{
public static void main(String args[]){
Person per = new Person("Tom",13) ; // 实例化Person
System.out.println("对象信息:
" + per) ;
}
};
控制台输出:
对象信息:
姓名:
Tom;年龄:
13
equals()方法:
equals()方法的主要功能是进行对象的比较操作,String本身是Object类的子类,所以已经重写了该方法。
equals()方法的主要功能是完成对象的比较的。
例程三:
equals()方法比较对象。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Person{
private String name ; // 定义name属性
private int age ; // 定义age属性
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
@Override
public boolean equals(Object obj){
if(this==obj){ // 地址相等
return true ; // 肯定是同一个对象
}
if(!
(obj instanceof Person)){ // 不是Person对象
return false ;
}
Person per = (Person) obj ; // 向下转型
if(per.name.equals(this.name)&&per.age == this.age){
return true ; // 依次比较内容
}else{
return false ;
}
}
@Override
public String toString(){
return "姓名:
" + this.name + ";年龄:
" + this.age ;
}
}
public class ObjectDemo03{
public static void main(String args[]){
Person per1 = new Person("Rubby",30) ; // 实例化Person
Person per2 = new Person("Rubby",30) ; // 实例化Person
System.out.println(per1.equals(per2)?
"是同一个人!
" :
"不是同一个人!
") ;
System.out.println(per1.equals("hello")?
"是同一个人!
" :
"不是同一个人!
") ;
}
}
控制台输出:
是同一个人!
不是同一个人!
Object类是所有类的父类,则所有类的对象都可以使用Object接收,但是Object不光可以接收对象,还可以接收任意的引用数据类型。
例程四:
使用Object接收接口实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
interface A{
public String getInfo();
}
class B implements A{
@Override
public String getInfo(){ // 覆写方法
return "Hello World!
!
!
" ;
}
}
public class ObjectDemo04{
public static void main(String args[]){
A a = new B() ; // 向上转型,为接口实例化
Object obj = a ; // 使用Object接收,向上转型
A x = (A)obj ; // 向下转型
System.out.println(x.getInfo()) ;
}
}
控制台输出:
HelloWorld!
!
!
例程五:
使用Object接收数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ObjectDemo05{
public static void main(String args[]){
int temp[] = {1,3,5,7,9} ; // 定义数组
Object obj = temp ; // 使用Object接收数组
print(obj) ;
}
public static void print(Object o){
if(o instanceof int[]){ // 判断是否是整型数组
int x[] = (int[])o ;
for(int i=0;i System.out.print(x[i] + "\t") ; } } } } 控制台输出: 13579 总结: Object类是所有类的父类,只要是引用数据类型,都可以使用Object类进行接收 对象在进行向下转型之前,一定会发生向上转型(instanceof关键字) 2014-12-09 回复 1 _潇潇暮雨 【static关键字】 非static关键字声明的属性和方法,每个对象都占有各自的内容。 如果现在希望一个属性和被该类的所有对象共同拥有,则可以将其声明为static类型,声明为static类型的属性或者方法之后,此属性或者方法也称为静态变量和方法,可以由类名直接调用。 使用static声明属性: static可以声明全局属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Person{ // 定义Person类 String name ; // 定义name属性,暂时不封装 int age ; // 定义age属性,暂时不封装 String country = "A城" ; // 定义城市属性,有默认值 public Person(String name,int age){ this.name = name ; this.age = age; } public void info(){ // 得到信息 System.out.println("姓名: " + this.name + ",年龄: " + this.age + ",城市: " + country) ; } } public class StaticDemo01{ public static void main(String args[]){ Person p1 = new Person("张三",30) ; // 实例化对象 Person p2 = new Person("李四",31) ; // 实例化对象 Person p3 = new Person("王五",32) ; // 实例化对象 p1.info() ; p2.info() ; p3.info() ; } } 控制台输出: 姓名: 张三,年龄: 30,城市: A城 姓名: 李四,年龄: 31,城市: A城 姓名: 王五,年龄: 32,城市: A城 以上代码确实实现了一些基本功能,但是此时的城市名称不叫“A城”而改成了“B城”,如果现在已经产生了5000个对象,那么就意味着此时就需要修改5000个对象中的country属性。 所以此时最好使用static关键字声明属性。 代码改为: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 class Person{ // 定义Person类 String name ; // 定义name属性,暂时不封装 int age ; // 定义age属性,暂时不封装 static String country = "A城" ; // 定义城市属性,有默认值,static public Person(String name,int age){ this.name = name ; this.age = age; } public void info(){ // 得到信息 System.out.println("姓名: " + this.name + ",年龄: " + this.age + ",城市: " + country) ; } } public class StaticDemo02{ public static void main(String args[]){ Person p1 = new Person("张三",30) ; // 实例化对象 Person p2 = new Person("李四",31) ; // 实例化对象 Person p3 = new Person("王五",32) ; // 实例化对象 System.out.println("--------------- 修改之前 -------------") ; p1.info() ; p2.info() ; p3.info() ; Person.country = "B城" ; // 修改static属性,使用类名 System.out.println("--------------- 修改之后 -------------") ; p1.info() ; p2.info() ; p3.info() ; } } 控制台输出: ---------------修改之前------------- 姓名: 张三,年龄: 30,城市: A城 姓名: 李四,年龄: 31,城市: A城 姓名: 王五,年龄: 32,城市: A城 ---------------修改之后------------- 姓名: 张三,年龄: 30,城市: B城 姓名: 李四,年龄: 31,城市: B城 姓名: 王五,年龄: 32,城市: B城 由以上例程可以看出: 修改一个对象中的country属性,则其他对象的country属性也全部被改变,证明该属性是该类的所有对象所共享的。 每一个对象都有自己各自的堆栈空间,堆内存中保存着各自的属性,但是所有的static属性则是保存在了全局数据区中,所有的对象共同指向全局数据区中的一个内容,所以当一个对象修改之后,所有对象的该属性将全部被改变。 PS: java中内存区域的划分: 栈内存: 保存对象的名称(访问的堆内存的地址) 堆内存: 保存每个对象的具体属性 全局数据区: 保存static类型的数据 全局代码区: 保存所有方法的定义 一般使用static属性的时候,最好使用类名称直接调用,采用“类名.属性”的形式进行调用。 同理,可以使用static关键字声明方法。 ——此方法可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 中的 一些 概念 总结