高新技术(一)

高新技术(一)

1.静态导入

这是自JDK1.5后的新特性

● import语句可以导入一个类或者某个包中的所有类

● import static语句导入一个类中的某个静态方法或所有静态方法

举一个简单的例子:

import static java.lang.System.out;//导入java.lang包下的System类的静态方法out;
public class HelloWorld{
    public static void main(String[] args){
        out.print("Hello World!");//既是在这里不用再写成System.out.println("Hello World!")了,因为已经导入了这个静态方法out。
    }
}


 

2.可变参数

可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。

可变参数的特点:

(1)只能出现在参数列表的最后; 

(2)...位于变量类型和变量名之间,前后有无空格都可以;

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

public class Varable {
 public static void main(String [] args){
  System.out.println(add(2,3));
  System.out.println(add(2,3,5));
 }
 public static int add(int x,int ...args){
  int sum=x;
  for(int i=0;i
   sum+=args[i];
  }
  return sum;
 }
}


 

3.增强for循环

●语法:for(type 变量名:集合变量名){...}

注意事项:

●迭代变量必须在()中定义!

●集合变量可以是数组或实现了Iterable接口的类

我们不妨还是拿上面可变参数的方法进行举例。

public class Varable {
 public static void main(String [] args){
  System.out.println(add(2,3));
  System.out.println(add(2,3,5));
 }
 public static int add(int x,int ...args){
  int sum=x;
  for(int i:args){
   sum+=args[i];
  }
  return sum;
 }
}


更加简明,快捷。

4.基本类型的自动拆箱与自动装箱

Java中有八大基本类型,每一个基本类型都对应一个类,在JAVASE5.0之后, java虚拟机会自动调用封装类中的方法实现你需要的基本数据类型,而不用你手工进行转换

1.自动拆箱(Auto unBoxing)

系统自动将 类 转换成 基本数据类型

Integer i=12;

2.自动装箱(Auto Boxing)

系统自动将 基本类型 转换成 类

System.out.println(i+3);

 

5.享员模式

享元模式是指“运用共享技术有效地支持大量细粒度的对象。”

我们可以理解为:当细粒度对象的数量特别多时运行的代价相当高,此时运用共享技术可大大降低运行的成本。

举一个简单的例子:

Integer i1=28;

Integer i2=28;

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

结果会是true,在Integer对象是-128-127范围内时,它们使用同一个对象。

享员模式是一种设计模式,当对象粒度微小,而又使用频繁的时候,我们让这个对象成为一种共享状态。它的重点在于分离与不变,内部状态的不变和外部状态的分离。

比如说Word书写过程中,英文字母一个就26个,它们是固定的,但同时它们可能出现在不同的地方。每一个英文字母本身是不会变化的,但是在外部显示时它们将出现在不同地方,即外部状态是坐标。

这样一种设计模式,可以较少对象数量,节省内存空间。

 

6.枚举

在java中枚举的实质是一个类  但是默认是没有构造方法的 但是我们可以为其添加构造方法但是必须是私有的 .方法列表要在元素列表之下 
其实在 Java类中定义枚举就是定义内部类   .
内部类和外部类 根据权限的不同 访问修饰符也不一样。

public enum WeekDay   //枚举其实就一个类  也有方法 
  {
   MON ,TUS,WED ,THI,FRI,SAT,SUN   ;//可以加;也可以不加
  }


1)我们可以在Main方法中对Java中的枚举进行如下操作
          WeekDay day=WeekDay.MON ;
   System.out.println(day);  //自动重载了toString()方法
   System.out.println(day.name());//输出枚举对象的名字
   System.out.println(day.ordinal());//输出在枚举中的顺序基于0 
   System.out.println(WeekDay.valueOf("SAT").toString()); //通过传递一个参数字符串来构造一个对象静态方法  

   System.out.println(WeekDay.values().length);//静态方法获得一个枚举常亮

 

2) 我们然后修改 枚举的定义如下

public enum WeekDay   //枚举其实就一个类  也有方法 
  {
   MON(1),TUS,WED(3),THI,FRI,SAT,SUN   ;//可以加;也可以不加
   private WeekDay(){System.out.println("不带参数的构造方法!");}
   private WeekDay(int i){System.out.println("带参数的构造方法 !");}
  }


 

只要程序一运行构造函数就会调用 这是因为Java中的枚举元素 都会自动生成静态对象所以在程序加载的时候构造函数便会被执行 
如果我们想分别调用枚举的构造方法 ,那么我们只需要在枚举元素后面增加上相应的参数即可 。
一定要注意 枚举的构造函数一定要是私有    。。枚举和类的声明是一样的  。。


3)利用枚举实现 TrafficLamp转向灯 : 
 //枚举元素就是一个个枚举类的实例   但是在这里我们对于枚举的元素其实是外部类的子类  我们通过匿名内部类 来创建枚举对象 并且实现其抽象方法

     
 
 
    
public enum TrafficLamp
  {  
   GREEN()  
   {
    public TrafficLamp nextLamp() 
    {
   return YELLOW ; 
    }
   },

YELLOW(){
   
    public  TrafficLamp nextLamp() 
    {
     return TrafficLamp.RED ;
    }
   
   }
   ,

RED(){
   
    public  TrafficLamp nextLamp()
    {
     return GREEN ;
    }
   
   }  ;

   public abstract TrafficLamp nextLamp()  ;//定义一个抽象方法那么这个类只能被继承了 
}



在Main中调用
 

   TrafficLamp tr=TrafficLamp.YELLOW ;
   System.out.println(tr);
   System.out.println(tr.nextLamp());
   System.out.println(tr.nextLamp().nextLamp());  //到下一个转向灯

 


 4)我们经常说到Singleton, 也就是单例模式。这个单例模式要求在程序的运行时候,一个程序的某个类,只允许产生一个实例, 这个类就是一个单例类。
在Java中可以通过枚举来实现单例模式,单例模式 就是一个对象唯一的概念。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值