Java基础之匿名内部类、包装类

目录
  • 1、匿名内部类
  • 2、Object类简介
    • 2.1 取得对象信息toString()
    • 2.2 对象的比较equals()
    • 2.3 Object接口引用数据类型
  • 3、包装类
    • 3.1 装箱与拆箱
    • 3.2 字符串与基本数据类型的转换
    • 3.3 包的定义
    • 3.4 包的导入
  • 4、访问控制权限
  • 5、jar命令

1、匿名内部类

内部类:在一个类的内部定义了另外的类,称为内部类,匿名内部类指的是没有名字的内部类。为了清楚内部类的主要作用,下面首先观察一个代码。

interface IMessage{
	public void print();
}
class MessageImpl implements IMessage{//定义接口实现类
	public void print(){
		System.out.println("Hello World");
	}
}
class Demo{
	public static void get(IMessage msg){//接受接口对象
		msg.print();
	}
}
public class TestDemo1{
	public static void main(String args[]){
		IMessage msg = new MessageImpl();//子类为接口实例化
		Demo.get(msg);//传递msg对象
	}
}

如果说现在MessageImpl这个子类只使用一次,有必要按照以上的方式进行定义吗?

这个时候MessageImpl就没有什么意义了,但是可以利用匿名内部类的概念来解决此问题。匿名内部类是在抽象累和接口的基础之上发展起来的。

interface IMessage{
	public void print();
}
class Demo{
	public static void get(IMessage msg){//接受接口对象
		msg.print();
	}
}
public class TestDemo1{
	public static void main(String args[]){
		IMessage msg = new IMessage(){//匿名内部类
			public void print(){
				System.out.println("hello,world!");
			}
		};
		Demo.get(msg);//传递msg对象
	}
}

结论:基本上搞匿名内部类都应该在接口或抽象类形式上完成。

在抽象类中使用匿名内部类

abstract class Message{
	public void print(){
		System.out.print(this.getInfo());
	}
	public abstract String getInfo();
}
class Demo{
	public static void get(Message msg){//接受接口对象
		msg.print();
	}
}
public class TestDemo1{
	public static void main(String args[]){
		Demo.get(new Message(){
			public String getInfo(){
				return "www.baidu.com";
			}
		});//传递msg对象
	}
}

强调:一个普通类进行不要再去有子类进行继承,能够继承的只是抽象类和接口,所以在普通类上继续使用

匿名内部类的形式来定义子类,但是在正常的开发逻辑上是错误的。

2、Object类简介

在Java的定义之中,除了Object类之外,所有的类实际上都存在继承关系,即:如果现在定义了一个类,没有默认继承任何一个父类的话,则默认讲继承Object类,以下两种类最终定义效果是完全一样的。

Object类的无参构造是专门子类提供服务的。

方法名称 类型 描述
public String toString() 普通 取得对象信息
public boolean equals(Object obj) 普通 对象的比较
public int hashCode() 普通 返回对象的哈希码值

2.1 取得对象信息toString()

toString()的核心目的在于取得对象信息。相当于替换了getInfo()方法的功能。

class Person{
	private String name;
	private int age;
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	public String toString(){
		return "name = " + this.name + ",age = " + this.age ;
	}
}

public class TestDemo2{
	public static void main(String args[]){
		Person p = new Person("zsr",18);
		System.out.print(p.toString());
	}
}

2.2 对象的比较equals()

实际上对于equals()方法应该并不陌生,这个方法在String类中见过,String是Object类的子类,所以String类的equals()方法就是覆写了Object类中的equals()方法,在Object类之中,默认的equals()方法实现比较的是两个对象的内存地址数值,但是并不符合与真正的对象比较需要。对象比较之前也写过,但是之前那是自己定义的一个新的方法名称,今天可以给出标准的方法名称:equals()。

class Person{
	private String name;
	private int age;
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	public boolean equals(Object anObject){
		if(anObject == null){
			return false;
		}
		if(this == anObject){
			return true;
		}
		//判断anObject的实例是不是Person
		if( !(anObject instanceof Person)){
			return false;
		}
		//必须将Object类型变为Person类型后才可以调用name和age属性
		Person per = (Person) anObject;
		return this.name.equals(per.name) && this.age == per.age;
	}
	public String toString(){//覆写Object类方法
		return "name = " + this.name + ",age = " + this.age ;
	}
}

public class TestDemo3{
	public static void main(String args[]){
		Person per1 = new Person("zsr",18);
		Person per2 = new Person("zsr",18);
		//true
		System.out.println(per1.equals(per2));
		//false
		System.out.println(per1.equals("Hello,world!"));
	}
}

但是需要有一个注意,很多人在写对象的比较会使用如下的形式:

  • public boolean equals(Person anObject)

因为父类中的equals()方法用的是Object,所以以上的方法严格来讲已经不叫覆写,叫重载。

2.3 Object接口引用数据类型

在之前的分析来讲Object可以接收任意的对象,从结构上来讲Object是所有类的父类,但是Object概念并不仅仅局限于此,他已接收所有的引用数据类型,包括:接口、数组。

使用Object类接收数组,数组和Object没有任何明确的关系。

public class TestDemo4{
	public static void main(String args[]){
		Object obj = new int []{1,3,4};
		int data [] = (int [])obj;//向下转型
		for(int i = 0 ;i < data.length ; i++){
			System.out.println(data[i]);
		}
	}
}

接收接口对象,从接口的定义而言,它是不能去继承一个父类的,但是由于接口依然属于引用类型,所以即使没有继承类,也可以使用Object接收。

interface Message{}
class MessageImpl implements Message{//定义接口子类
	public String toString(){
		return "Hello World";
	}
}
public class TestDemo5{
	public static void main(String args[]){
		Message msg = new MessageImpl();//向上转型
		Object obj = msg;//向上转型
		Message temp = (Message) obj;//向下转型
		System.out.println(temp);//toString()
	}
}

从代码上讲,以上只能算是一个固定的操作概念,不过从实际来讲,因为有了Obejct类的出现,所有的操作就可以达到统一,那么之前的链表程序,就应该变得很方便了。所有的数据都使用Object接收,所有的对象比较(删除、查找)都可以使用equals()。

3、包装类

在Java的设计之中,一直倡导一个原则:一切皆对象,这个原则本省有一个漏洞,基本数据类型不是对象,所以这个原则就出现了问题,那么如果说现在这个问题由我们来解决,该如何解决呢?

class MyInt{
	private int num;//基本类
	public MyInt(int num){
		this.num=num;
	}
	public int intValue(){
		return this.num;
	}
}
public class TestDemo6{
	public static void main(String args[]){
		Object obj = new MyInt(10);//子类自动变为Object父类对象
		MyInt temp = (MyInt) obj;//向下转型
		int result = temp.intValue();
		System.out.println(result*result);
	}
}

以上的操作是将基本类型变为了一个对象的形式进行操作了,但是这里面有一个问题:基本数值型数据是可以进行数学运算的,可是以上变为了类的形式,那么肯定无法直接计算了。以上的问题既然我们都想到方法解决,那么Java也一定早已解决,为此它专门提供了八种包装类:

byte(Byte),short(Short),int(Integer),long(Long),float(Float),double(Double),boolean(Boolean),char(Character);

而这八种包装类有分为两大阵营:

​ 数值型(Number子类):Byte,Short,Integer(int),Float,Double,Long;

​ 对象型(Object子类):Boolean,Character(char)。

可是对于Number的子类,就必须观察出Number类之中定义的方法:byteVlue()、intVlue()、doubleVlue()、shortVlue()、longVlue()、floatVlue(),就是从包装的类之中取得所包装的数值。

3.1 装箱与拆箱

在基本数据类型和包装类之间的转化之中分为两个重要概念:

​ 装箱操作:将基本数据类型变为包装类,称为装箱,包装类的构造方法。

​ 拆箱操作:将包装类变为基本数据类型,称为拆箱,Number类中的xxValue()方法。

以int和Integer为例

public class TestDemo{
	public static void main(String args[]){
		Integer var = new Integer(10);//装箱
		int result = var.intValue();//拆箱
		System.out.println(result*result);
	}
}

以double和Double为例

public class TestDemo{
	public static void main(String args[]){
		Double var = new Double(10.0);//装箱
		double result = var.doubleValue();//拆箱
		System.out.println(result*result);
	}
}

以上的操作实在JDK1.5之前所进行的必须的操作,但是到了JDK1.5之后,Java提供了自动装箱和自动拆箱的机制,并且包装类的对象可以自动的进行数学计算了。

自动装箱与拆箱

public class TestDemo{
	public static void main(String args[]){
		Integer var = 10;//自动装箱
		int result = var;//自动拆箱
        //可以直接利用包装类进行对象操作
		System.out.println(++var*result);//自动进行数学运算
	}
}

但是到此为止还有一个小问题,实际上这一问题之前已经见过。

public class TestDemo{
	public static void main(String args[]){
		Integer x = new Integer(10);//新空间
		Integer y = 10;//入池
		Integer z = 10;
		System.out.println(x==y);//false
		System.out.println(x==z);//false
		System.out.println(y==z);//ture
		System.out.println(x.equals(y));//ture
	}
}

使用包装类的时候还需要考虑equals()和==的区别。

使用int还是Integer?

  • 在接收数据的时候,使用的一定都是int,而保存数据的时候一般使用Integer
  • 以后编写的简单java类统一不要再去使用基本数据类型,全部换位包装类

3.2 字符串与基本数据类型的转换

包装类之中所提供的最大优点在于可以讲字符串变为制定的基本数据类型,下面列出几个操作:

​ Integer类:public static int parseInt(String s);

​ Double类:public static double parseDouble(String s);

​ Boolean类:public static boolean parseboolean(String s;

但是character这个包装类之中,并没有提供一个类似的parseCharacter(),因为字符串String类之中提供了一个charAt()方法,可以取得制定索引的字符,而且一个字符的长度就是一位。

将字符串变为int

public class TestDemo{
	public static void main(String args[]){
		String str = "16";
		int result = Integer.parseInt(str);//String ——>int
		System.out.println(result*result);
	}
}

但是需要提醒的是,在执行这种转化的操作过程之中,字符串字符串中的全部内容必须由数字所组成,如果有一位内容不是数字,则在转化的过程之中讲出现如下的错误提示:NumbnerFormatException。

将字符串变为double

public class TestDemo{
	public static void main(String args[]){
		String str = "16.";
		double result = Double.parsedouble(str);//String ——>int
		System.out.println(result*result);
	}
}

将字符串变为boolean型数据

public class TestDemo{
	public static void main(String args[]){
		String str = "true";
		boolean result = Boolean.parseboolean(str);//String ——>int
		System.out.println(result);
	}
}

提示:在使用Boolean型包装类的时候,如果字符串之中的内容不是true或者是false,统一都按照false处理。

以上的操作是通过字符串变为一些基本类型的数据,但是反过来讲,基本数据类型如何变为字符串呢?

方式一:任何基本数据类型遇到了String之后都会变为String型数据;

public class TestDemo{
	public static void main(String args[]){
		int num = 100;
		String str = num+"";//int——>String //会产生垃圾
		System.out.println(str.length());
	}
}
//会有垃圾产生

方式二:利用String方法,public static String valueOf(数据类型 b)

public class BaoZhuangLei{
	public static void main(String args[]){
		int num = 100;
		String str =String.valueOf(num);//int——>String
		System.out.println(str.length());
	}
}

3.3 包的定义

在Java程序之中的包,主要的目的是可以将不同功能的文件进行分割,在之前的代码开发之中,所有的程序都保存在了同一个目录之中,这样一来所带来的问题:如果出现了同名的文件,那么会发生覆盖问题,因为在同一个目录之中不允许有重名的文件,而在不同的目录下可以有重名文件,所谓的包实际上指的就是文件夹。

package cn.mldn.demo;//定义包
public class Hello{
	public static void main(String args[]){
		System.out.println("Hello World");
	}
}

一旦定义完成之后,那么这个类的名字就成了“cn.mldn.demo.Hello”,即这既是完整的类名称,而在进行程序编译的时候也需要将*.class文件保存在包之中,于是为了方便开发,那么也就提供了一个打包的编译操作。

打包编译:javac -d . 类.java

-d:表示生成目录,根据package定义生成

-“.”:再当前目录下生成*.class

类.java:编译源程序代码

这个时候类的名字必须带上包的名称,所以执行类的时候:java cn.mldn.demo.Hello,也就是说完整类的名称就是“包.类”,而在所有的开发之中,没有包的类是绝对不存在的,只要是程序一定要有包。

3.4 包的导入

既然使用包可以将一个大型的程序拆分成不同的功能目录保存,那么这些不同的包之间也一定会存在包的导入问题,而导入包在程序之中使用import完成,下面通过一个程序进行演示。

//定义一个Message
package cn.mldn.util;//打包
class Massage{
	public String print(){
		return "Hello World";
	}
}
//定义另外一个类使用Message类
package cn.mldn.text;//打包
import cn.mldn.util.Message;//导入包
public class Text{
	public static void main(String args[]){
		Massage msg = new cn.mldn.util.Massage();
		System.out.println(msg.print());
	}
}

这个时候上面的两个类应该是按照顺序编译:

​ 应该首先编译Message.java程序:javac –d . Message.java;

​ 再次编译Test.java程序:javac –d . Test.java,但是这个时候出现了一下的错误提示:

Text.java:5: 错误: Massage在cn.mldn.util中不是公共的; 无法从外部程序包中对其进行
访问
                Massage msg = new cn.mldn.util.Massage();
                ^

提示:关于public class 和class定义类的区别

​ Public class:文件名和类名称保持一致,在一个*.java文件之中只能存在一个public class定义,如果一个类要想被外部包所访问必须定义为public;

​ Class:文件名称可以和类名称不一致,在一个*.java之中可以同事存在多个class定义,并且编译完成之后会形成多个*.class文件,使用class定义的类只能够在一个包中访问,不同包之间无法访问。

package cn.mldn.util;//打包
public class Massage{
	public String print(){
		return "Hello World";
	}
}

但是同时也发现了一个问题,现在这些类在编译的时候要有顺序,实在很麻烦,为此在java之中专门提供了一个可以进行自动连编的操作,编译的时候使用*.java:javac –d . .java,将一个目录之中所有的.java文件进行编译。

​ 但是以上的代码还有一个小问题:程序在进行导入的时候使用了“包.类”的完整名称完成的,但是如果在一个程序之中要同时导入一个包的多个类的时候,那么分开去编写实在很麻烦,为此可以使用通配符“*”完成导入。

package cn.mldn.text;//打包
import cn.mldn.util.*;//导入包
public class Text{
	public static void main(String args[]){
		Massage msg = new cn.mldn.util.Massage();
		System.out.println(msg.print());
	}
}

但是需要注意的是,在java之中使用“”或者是的单独导入,其从实际的操作性能上是没有任何区别的,因为即使使用了也表示导入所需要的类,不需要的不导入。

​ 可是在导入包的时候也会遇到一种比较麻烦的问题:会导入不同包的同名类,例如:对于Message类,现在在两个包中都有:cn.mldn.util cn.mldn.info

package cn.mldn.text;//打包
import cn.mldn.util.*;//导入包
import cn.mldn.info.*;//导入包
public class Text{
	public static void main(String args[]){
		Message msg = new cn.mldn.util.Message();
		System.out.println(msg.print());
	}
}
/*
Text.java:6: 错误: 对Message的引用不明确, cn.mldn.info中的类 cn.mldn.info.Messag
e和cn.mldn.util中的类 cn.mldn.util.Message都匹配
                Message msg = new cn.mldn.util.Message();
                ^
*/

由于某种需要,同时导入两个包,这个时候要使用Message类的时候必须加上类的全名。

package cn.mldn.text;//打包
import cn.mldn.util.*;//导入包
import cn.mldn.info.*;//导入包
public class Text{
	public static void main(String args[]){
		cn.mldn.util.Message msg = new cn.mldn.util.Message();
		System.out.println(msg.print());
	}
}

4、访问控制权限

之前学习到的private就属于一种访问控制权限,而这种访问控制权限只是封装的一部分,再java里面提供有四种访问控制权限:private、default、protected、public,而这四种访问控制权限定义如下:

范围 private default protected public
同一包中的同一类
同一包中不同类
不同包中的子类
不同包中的非子类

实际上public永远都可以访问,但是对于封装而言主要使用三个权限:private、default、protected。

观察protected访问权限

Info.java

package cn.sxau.demo.a;
public class Info {
//protected权限
	protected String str = "www.baidu.com";

}

SubInfo.java

package cn.sxau.demo.a;
import cn.sxau.demo.a.Info;
public class SubInfo extends Info{
	public void print(){
		System.out.println(super.str);
	}
}

TestInfo.java

package cn.sxau.testab;
import cn.sxau.demo.a.SubInfo;
public class TestInfo{
	public static void main(String args[]){
		new SubInfo().print();
	}
}

可以发现SubInfo继承的子类Info不在同一个包内,但是在同一个子类中,并且可以调用其子类。

错误代码

package cn.sxau.testab;
import cn.sxau.demo.a.Info;
public class TestInfo{
	public static void main(String args[]){
		System.out.println(new Info().str);
	}
}
/*
F:\java\javabase\day09>javac -d . TestInfo.java
TestInfo.java:5: 错误: str 在 Info 中是 protected 访问控制
                System.out.println(new Info().str);
                                             ^
1 个错误
*/

原因是str是protected权限,所以在不同类非子类的类中是无法访问。

对于权限的选择

  • 对于封装的描述大部分情况下都使用的是private,很少的情况下使用protected,这两个都叫封装
  • 属性都是以private,方法都使用public。

封装性就是指private、protected、default三个权限的使用。

5、jar命令

Jar是一种java给出的压缩格式文件,即:可以将*.class文件以*.jar压缩包的方式给用户,这样方便程序的维护,如果要使用jar的话,可以直接利用JDK给出的jar命令完成。

c:创建一个新的归档文件

f:指定jar的文件名称,由用户制定一个*.jar的文件名。

v:生成标准的压缩信息

Message.java

package cn.sxau.util;//打包
public class Message{
	public String print(){
		return "hello world";
	}
}

将Message.java程序进行编译:javac –d . Message.java,生成包.类;将“包.类”压缩成my.jar文件:jar –cvf my.jar cn,出现了一个my.jar包;

此时my.jar就包含了所需要的程序使用类

现在my.jar和MyTest.java处于同一目录之中。但是发现找不到my.jar之中定义的内容,这是因为在java之中每一个*.jar文件都属于一个独立的CLASSPATH路径,如果要想使用,必须配置CLASSPATH。

在测试之前需要在cmd配置SET CLASSPATH=.;F:\java\javabase\day09\my.jar

//定义一个测试类 调用my.jar
package cn.sxau.test;
public class MyTest{
	public static void main(String args[]){
		cn.sxau.util.Message msg = new cn.sxau.util.Message();
		System.out.println(msg.print());
	}
}
/*
执行
F:\java\javabase\day09>java cn.sxau.test.MyTest
hello world
*/

到此这篇关于Day09基础不牢地动山摇-Java基础的文章就介绍到这了,更多相关Java匿名类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java线程池详细解读

    目录 1.线程池 1.1 线程池概念 1.2 线程池的实现 2.StringBuffer类 面试题:请解释String.StringBuffer.StringBuilder的区别? 3.Runtime类 面试题:什么叫gc?如何处理 4.System类 面试题:请解释final.finally.finalize的区别? 5.对象克隆 6.Date类 6.1 日期处理类-Date类 6.2 日期格式化-SimpleDateFormat类(核心) 7. 数字操作类-Math类 7.1 随机数-Ran

  • Day16基础不牢地动山摇-Java基础

    目录 1.反射机制 1.1 认识反射 1.2 取得父类信息 1.3 反射调用构造 1.4 反射调用方法 1.5 反射调用成员 1.6 反射与简单Java类-单级VO操作原理 1.7 单极自动VO设置实现 1.8 反射与简单Java类-多级VO设置实现 2.ClassLoader类加载器 2.1 认识类加载器 2.2 自定义ClassLoader 1.反射机制 反射机制如果只是针对普通开发者而言意义不大,一般都是作为一些系统的构架设计去使用的,包括以后学习的开源框架,那么几乎都是反射机制. 1.1

  • Day15基础不牢地动山摇-Java基础

    目录 1.字符编码 1.1 常用字符编码 1.2 乱码产生分析 2.内存流基本操作 3.打印流 3.1 格式化文本信息 4. System类 4.1 系统输出 4.2 系统输出 4.3 系统输入 5.BufferedReader类 6.Scanner 7.对象序列化 7.1 对象序列化的概念 7.2 实现序列化和反序列化 7.3 transient关键字(了解) 1.字符编码 1.1 常用字符编码 在计算机的世界之中,所有的显示文字都是按照其指定的数字编码进行保存的,如果没有正确的解码,那么就坑

  • Day14基础不牢地动山摇-Java基础

    目录 1.定时器 2.UUID类 3.Base64加密处理 加密处理 多次加密 4.ThreadLocal类 5.IO-File类 5.1 基本操作 5.2 取得文件信息 5.3 综合案例:目录列表 6.IO- 字节流与字符流 6.1 字节输出流:OutputStream 6.2 字节输入流:InputStream 6.3 字符输出流:Writer 6.4 字符输入流:Reader 6.5 字节流与字符流区别 7.转换流 1.定时器 推动整个计算机硬件的发展的核心关键性技术就是时钟.所以在企业开

  • 一篇文章带你深入了解javaIO基础

    目录 一.认识IO 1.IO的分类 2.IO的方式 3.IO读写的方式 4.IO的特性 二.文件操作 1.文件的构成 2.文件的创建 3.文件操作的API使用 三.IO流 1.流的分类 2.流的创建 3.流的使用 <1>输入流 <2>输出流 <3>实例:文件的复制 总结 一.认识IO 1.IO的分类 (1)BIO:同步阻塞IO (2)NIO:同步非阻塞IO (3)AIO:异步阻塞IO 注意: 这里主要介绍BIO 2.IO的方式 IO本质就是对数据的操作 (1)网络IO

  • Day10基础不牢地动山摇-Java基础

    目录 1.异常的捕获与处理 1.1 处理异常 1.2 异常处理的流程 1.3 throw关键字 1.4 异常处理模型 1.5 RuntimeException 1.6 断言:assert 1.7 自定义异常 2.链表 2.1 链表基本的结构 2.2 链表实现结构说明 2.3 增加链表数据-public void add(数据) 2.4 增加多个数据-public void addAll(数据数组) 2.5 统计数据个数-public int size() 2.6 链表数据转换为对象数组-publ

  • Java基础之匿名内部类、包装类

    目录 1.匿名内部类 2.Object类简介 2.1 取得对象信息toString() 2.2 对象的比较equals() 2.3 Object接口引用数据类型 3.包装类 3.1 装箱与拆箱 3.2 字符串与基本数据类型的转换 3.3 包的定义 3.4 包的导入 4.访问控制权限 5.jar命令 1.匿名内部类 内部类:在一个类的内部定义了另外的类,称为内部类,匿名内部类指的是没有名字的内部类.为了清楚内部类的主要作用,下面首先观察一个代码. interface IMessage{ publi

  • Java基础巩固系列包装类代码实例

    示意图: 代码: //包装类 8种基本数据类型对应着一个类,此类即为包装类 public class TestWrapper { //基本数据类型.包装类与String类之间的转换 @Test public void test2() { //基本数据类型.包装类 -----> String类:调用String类的静态的重载的valueOf(Xxx x)方法 int i1 = 10; String str1 = i1 + ""; //"10" String st

  • Java基础教程之基本类型数据类型、包装类及自动拆装箱

    前言 我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long, Float, Double, Character, Boolean.关于基本数据类型的介绍可参考Java基础(一) 八大基本数据类型 那么为什么需要包装类? JAVA是面向对象的语言,很多类和方法中的参数都需使用对象,但基本数据类型却不是面向对象的,这就造成了很多不便. 如:List<in

  • Java基础详解之包装类的装箱拆箱

    一.包装类 概念: Java提供了两个类型系统,基本数据类型和引用数据类型,使用基本数据类型在于效率,然而很多情况下回创建对象使用,因为对象能做更多的功能. 所以可以使用一个类,把基本数据类型包装起来,在类中定义一些方法,这就叫做包装类.我们可以用这种方法来操作这些数据类型 基本类型 对应包装类(位于java.lang中) byte Byte short Short int Integer long Long float Float double Double char Character bo

  • Java基础之包装类

    一.java的包装类 什么是包装类 对于基本数据类型来讲,其实就是一个数字,但是当给基本数据类型添加一些属性 方法和构造器,将基本数据类型对应进行一个封装,就产生了一个新的类,这个类被称为是包装类. 那么基本数据类型在前面中讲过有byte short int long float double char boolean,也就是将这些进行封装,基本数据类型和包装类的对应关系是怎样的呢? 基本数据类型 对应的包装类 byte Byte short Short int Integer long Lon

  • java基础之包装类的介绍及使用

    1. 包装类的介绍 针对八种基本数据类型定义相应的引用类型--包装类(封装类),有了类的热点后,就可以调用类中的方法 2. 基本数据类型 --> 包装类:调用包装类的构造器,如in1.toString() 使用场景:如果形参是一个object类类型的,必须要把基本类型转换成包装类才能传入到形参用 3. 包装类 --> 基本数据类型:调用包装类的xxxValue() 使用场景:包装类作为一个对象,不能做加减乘除运算的,必须转换成基本类型后才可以 但jdk5已经支持自动装箱和自动拆箱,所以不需要再

  • Day11基础不牢地动山摇-Java基础

    目录 1.Eclipse开发工具 1.1 Eclipse历史 1.2 快捷键 1.3 Debug调试 1.4 JUNIT测试工具 2.Java基础新特性 2.1 可变参数 2.2 foreach输出 2.3 静态导入 3. JDK三大主要特性--泛型 3.1 泛型的引出 3.2 泛型实现 3.3 通配符 3.4 泛型接口 3.5 泛型方法 4.JDK三大主要特性--枚举 4.1 多例与枚举 4.2 Enum类 面试题:请解释enum和Enum的区别? 4.3 枚举中定义其它结构 4.4 枚举应用

  • Java基础知识汇总

    Java基础知识 1.Java语言的优点: 1)Java是纯面向对象语言 2)与平台无关性,一次编译到处运行 3)Java提供了狠多内置类库 4)提供了对web应用的支持 5)具有较好的安全性(数组边界检测.Bytecode检测)和健壮性(强制型机制.垃圾回收器.异常处理) 6)去除c++难以理解的一些特性(头文件 指针 运算符重载 多重继承) 2.java与c++的异同: 1)Java为解释型语言,c++为编译型语言,java会慢但是跨平台 2)Jave为纯面向对象,c++既面向对象又能面向过

  • JavaWeb基础教程之Java基础加强版

    1.myeclipse的安装和使用 * eclipse:是一个免费的开发工具 * myeclipse:是一个收费的插件,破解myeclipse, ** 安装目录的要求: 不能有中文和空格 ** 安装完成之后,选择一个工作空间 ,这个工作空间不能有中文和空格 * 破解myeclipse ** 运行run.bat文件,但是运行之前,必须要安装jdk,通过配置环境变量 * myeclipse的使用 * 创建一个工程 - 类型 java project web project - 选择依赖的jdk,可以

  • Java基础教程之final关键字浅析

    前言 前面在讲解String时提到了final关键字,本文将对final关键字进行解析. static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final关键字及其用法. final从总体上来说是"不可变的",可用于修改类.方法.变量. 一. final类 final修饰的类,该类不能被继承.当你确认一个类永远不会被继承或不想被继承,那么就可以用final修饰. 同样,对于

随机推荐