黑马程序员<Java 1.5新特性>静态导入、增强for、可变参数、自动装箱拆箱、枚举

原创 2013年10月31日 14:48:42
------- android培训java培训、期待与您交流! ----------

 

一、静态导入

  1、静态导入的与普通import的区别:

    import语句可以导入一个类,或者包中的类;

    import static 语句可以导入一个类的中的某个静态成员,也可以导入所有的静态成员。

  2、优劣分析:

    优点:可以少写类名,使某些代码变简洁

    缺点:成员归属不明确,使可读性不强,易产生混淆

  3、用法示例:

package cn.itheima.blog1;
//import static java.lang.Math.*;//导入所有成员
import static java.lang.Math.PI;//静态导入成员变量
import static java.lang.Math.max;//静态导入成员函数

public class StaticImportDemo {
	/**
	 * 静态导入示例(Math类)
	 * 1、导入所有成员
	 * 2、导入某个成员函数
	 * 3、导入某个成员变量
	 */
	
	public static void main(String[] args) {
		System.out.println("PI的值是" + PI);
		System.out.println("1,2之间较大的数为:" + max(1,2));
		
	}
}

 

二、可变参数

1、用法格式:void sum(int ... arr){}

2、特点:

           第一:只能出现在参数列表的最后;

          第二:...位于变量类型和变量名之间,前后有无空格都可以;

          第三:调用可变参数的方法时,编译器为该可变参数隐含创建一个数组, 在方法体中一数组的形式访问可变参数

3、适用情况:适用于参数类型固定,但是参数数量不固定的情况

4、用法示例:

package cn.itheima.blog1;

public class VariableParameters {
	/**
	 * 可变参数示例
	 */
	public static void main(String[] args) {
		//输入不同参数
		System.out.println(sum(1, 2));
		System.out.println(sum(2, 3, 2, 2));
	}
	
	//可变参数只能在最后
	public static int sum(int x, int...arg) {
		int sum = x;
		//参数用数组维护,对其进行遍历
		for(int i = 0; i < arg.length; i++){
			sum = sum + arg[i];
		}
		return sum;
	}
}

三、增强for循环

1、用法格式:for(T type : 需要被遍历的集合(实现Iterator)或者数组)

2、与传统for循环的比较:

      第一:传统for循环能完全替代普通for循环

      第二:增强for适用于仅需遍历的情况,比较方便;而传统for则还适用在操作数组角标,不需要遍历数组等情况下。

3、用法示例:

package cn.itheima.blog1;

public class ForStrong {

	/**
	 * 增强for循环
	 */
	public static void main(String[] args) {
		int[] arr = new int[3];
		//对数组中的每个元素赋值,不仅要遍历还要操作角标,用普通for
		for(int i = 0; i < arr.length; i++){
			arr[i] = i + 1;
		}
		//遍历数组,打印,不需要对数据进行操作
		for(int i : arr){
			System.out.print(i + " ");
		}
	}

}

三、自动拆箱装箱与享元模式

1、拆箱与装箱:

      拆箱:把基本数据类型的包装类型转换成基本数据类型,当包装类与基本数据类型运算就需要自动拆箱

      装箱:把基本数据类型转换成包装类型,当基本数据类型赋值给包装类,就会自动装箱

2、细节:

    byte,short,int,char,long在-128-127之间的数,装箱成各自的包装类时,均会对象重用,boolean类型一直会对象重用,而double,float就不会,这就是享元模式的一种体现。

3、用法示例:

package cn.itheima.blog1;

public class AutoBoxing {

	/**
	 * 自动拆装箱
	 */
	public static void main(String[] args) {
		//自动装箱,将基本数据类型封装成对应包装类
		Integer b1 = 2;
		Integer b2 = 2;
		//2在-128到127之间,随便是两个对象,但是指向的是同一处
		System.out.println(b1 == b2);
		
		/*
		 * 实现细节:c1是包装类,c2是int,所以第三步运算过程是
		 * c1自动拆箱成int,与c2相加后,又自动装箱为Integer
		 */
		Integer c1 = 3;
		int c2 = 5;
		c1 = c1 + c2;
		System.out.println(c1.getClass());
	}

}

4、享元模式(Flyweight Pattern)

    享元模式:若有很多的小对象,均有相同的属性,那就将其作为一个对象,相同的属性作为对象的内部属性;而不同的属性,作为函数的参数传入,作为外部属性。

    适用范围:当大量物件只是重复因而导致无法令人接受的使用大量内存

    实例:word中的字母,系统的文件夹、文件图标

 

五、枚举

     在程序开发中会存在一种数据集,数据的集中的值是固定不变的,是穷尽的。如四季,只有春夏秋冬,一年中也只有12个月份。这样就产生了一种类型,叫枚举,关键字enum

1、作用:限定数据,必须是枚举类型内指定的值

2、声明格式:[public] enum 枚举类型名称{

                                  枚举对象1, 枚举对象2,..., 枚举对象n;

                          }

3、细节:

    (1)构造器:

            1)构造器只是在构造枚举值的时候被调用。

            2)构造器只有私有private,绝不允许有public构造器。这样可以保证外部代码无法重新构造枚举类的实例,因为枚举值是public static final的常量,但是枚举类的方法和数据域是可以被外部访问的。

            3)构造器可以有多个,调用哪个即初始化相应的值。

    (2)所有的枚举类都继承了Enum方法,方法如下:

          非静态方法:

             1toString() ---> 返回枚举量的名称

             2ordina() ---> 返回枚举值在枚举类中的顺序,按定义的顺序排

             3getClass() ---> 获取对应的类名

          静态方法:

            1valueOf(String e) ---> 转为类中对应的对象,即将字符串转为对象

            2values() ---> 获取数组,将元素放入一个数组中。

   (3)语法规范

            1)元素列表即所有的元素,必须放在整个类的最前面。

            2)元素列表后分号可有可无,但元素后面还有其他内容时,必须加上分号。

            3)枚举类中的方法为private

            4)在元素后跟上(),就可指定要使用的构造方法,含参数。

            5)枚举类中的每个元素都是它的一个子类对象,当枚举类中存在abstract方法,须在子类后加{},并在其中实现此方法。

4、枚举模拟类:

     enum声明定义的类型就是一个特殊的类,构造方法私有,其中的元素都是该类的实例,均为静态。而这些类都是类库中Enum 类的子类(java.lang.Enum<E>)。它们继承了这个Enum中的许多有用的方法 。动手写一个枚举模拟类 

package cn.itheima.blog1;

class Season{
	//均为该类的实例
	public final static Season SPR = new Season();
	public final static Season SUM = new Season();
	public final static Season AUT = new Season();
	public final static Season WIN = new Season();
	//构造方法私有化
	private Season(){
		
	}
}

public class SeasonDemo {

	public static void main(String[] args) {
		//只能通过类名建立实例,建立的实例只能是春夏秋冬四个季节
		Season s1 = Season.SUM;
	}

}

5、用Enum写交通信号灯

package cn.itheima.blog1;
/*
 * 枚举的用法
 */

//用enum替代class关键字,为枚举类型
public enum TrafficLamp {
	//元素在最前面,后面有內容,需要加上;号
	//调用构造函数,
	RED(57) {
		public TrafficLamp nextLamp() {
			return GREEN;
		}
	},
	GREEN(60) {
		public TrafficLamp nextLamp() {
			return YELLOW;
		}
	},
	YELLOW(3) {
		public TrafficLamp nextLamp() {
			return RED;
		}
	};
	private int time;
    //抽象方法,子类需要实现
	public abstract TrafficLamp nextLamp();
	//構造方法私有化
	private TrafficLamp(int time) {
		this.time = time;
	}
}



 

 

   

  

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

黑马程序员——Java1.5新特性之享元模式、增强for循环、可变参数、静态导入、自动装箱和拆箱

---------------------- android培训、java培训、期待与您交流! ---------------------- 享元模式是构造型模式之一,通过与其他类似的对象共享相同数...

java JDK1.5新特性(一) [静态导入] [可变参数] [增强for] [自动装箱拆箱] [枚举]

------- android培训、java培训、期待与您交流!  ---------- 静态导入 Static import 静态导入的优缺点 可变参数 Varargs 可变参数的特点...

1.5新特性静态导入、增强for、可变参数、自动装箱拆箱、枚举

--------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! --------------- 第一  静态导入 一、概述: 1...

黑马程序员——高新技术--JDK1.5新特性(for循环增强、可变参数、静态导入、自动装拆箱、享元)

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- JDK一般升级目的: 1、简化书写。 2、提高效率。 3、增加安全性。 格式: for(数据类型 变量...

黑马程序员——静态导入,可变参数,自动拆箱装箱以及享元设计模式 JDK1.5新特性

----------------------    android培训    java培训   期待与您交流!    ----------------------&#...

黑马程序员--枚举,增强for循环,可变参数,静态导入,自动拆箱和自动装箱

---------------------- android培训、java培训、期待与您交流! ---------------------- ①静态导入:导入某个类下的静态方法。 代码:   i...

黑马程序员--Java基础加强(2)-- JDK1.5新特性之可变参数,增强for,自动拆装箱,枚举

JDK1.5新特性之可变参数,增强for,自动拆装箱,枚举 一、 可变参数 1、当一个方法,需要的参数不确定时,可以使用可变参数,比如add方法,希望传入几个参数就让这几个参数相加,声明形式: pub...

JAVA JDK1.5新特性<静态带入、可变参数、增强For循环、自动装箱及自动拆箱>

一、静态导入 1、写法:         import staticjava.util.Arrays.*;//导入的是Arrays这个类中的所以静态成员。      ...

黑马程序员:jdk1.5新特性1 (静态导入、可变参数、增强for循环、享元模式)

静态导入: import static java.lang.Math.*;          //import static java.lang.Math.max;    ...

黑马程序员---JDK1.5新特性之(增强for循环、可变参数、静态导入)

增强for循环
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)