java学习之面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java学习之面向对象相关的知识,希望对你有一定的参考价值。

下面来谈谈java编程中的一些语法:

1、什么是对象数组?

对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋值给数组。

对象数组的声明:

类名[]  对象数组名称  = new  类名[数组长度];
 1 class Person{  
 2     private String name ;       // 姓名属性  
 3     public Person(String name){ // 通过构造方法设置内容  
 4         this.name = name ;      // 为姓名赋值  
 5     }  
 6     public String getName(){  
 7         return this.name ;      // 取得姓名  
 8     }  
 9 };  
10 public class ObjectArrayDemo01{  
11     public static void main(String args[]){  
12         // 类名称 数组名称[] = new 类名称[长度]  
13         Person per[] = new Person[3] ;  // 开辟了三个空间大小的数组  
14         System.out.println("============== 数组声明 =================") ;  
15         // 对象数组初始化之前,每一个元素都是默认值  
16         for(int x=0;x<per.length;x++){   // 循环输出  
17             System.out.print(per[x] + "") ;    // 因为只是开辟好了空间,所以都是默认值  
18         }  
19         // 分别为数组中的每个元素初始化,每一个都是对象,都需要单独实例化    
20         per[0] = new Person("张三") ; // 实例化第一个元素  
21         per[1] = new Person("李四") ; // 实例化第二个元素  
22         per[2] = new Person("王五") ; // 实例化第三个元素  
23         System.out.println("\n============== 对象实例化 =================") ;  
24         for(int x=0;x<per.length;x++){   // 循环输出  
25             System.out.print(per[x].getName() + "") ;  // 此时,已经实例化完成了,所以会直接打印出姓名  
26         }  
27     }  
28 }

使用对象数组可以实现多个对象的管理。

2、foreach与可变参数

1)、foreach循环(增强for循环)

  声明的方式:

  for(类型   变量名称:数组或集合){

        //代码code

      }

 1 class Person{
 2 
 3   public  static  void  main(String[] args){
 4 
 5      String []names={"马倩","小强","小明","俊明"}  //定义数组
 6 
 7      for(String name:names){
 8                                  //遍历names,输出到name中
 9        System.out.println(name); 
10      }
11    
12   }
13 }

 

2)、可变参数:根据需要自动传人任意个数的参数。

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

可变参数的特点:

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

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

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

class Demo{

  public  static void main(String [] args){
   
   Demo  d=new Demo();

   d.print("xiaoming","wancai","xioaqiang","maotou");

   }

   public  static  void  print(String ...params){

      for(String  s:params){   //可变参数params
 
        System.out.println(s);

       }
   }

}

 

3、java中有很多设计模式,现在我们来说说单例设计模式。

单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点(保证一个类在内存中对象的唯一性)。

如何保证对象的唯一性呢?

1)、构造方法私有化(不允许其他的程序用new创造该类对象)

2)、声明一个本类对象(通过new关键字)

3)、给外部提供一个静态的方法获取对象实例。

如下:

class  TestDemo{
 
   private  TestDemo(){}   //构造方法私有化

   private  static  TestDemo  test=new  TestDemo();//声明一个本类对象

   public  static   TestDemo  getInstance(){

         return  test;
     }    //给外部提供一个静态方法

}

 

什么时候用到单例设计模式?

1)、通过在工具类的设计中使用

2)、当一个类中没有属性(对象的状态)

3)、该类作为工具类使用非常频繁。

单例设计模式下有两种实现方式:

1)、饿汗式

class  Single{   //类一加载,对象就已经存在,开发时常用这种
 
  private  static  Single s=new Singles();
 
  private  Single(){}
  
   public  static Single  getInstance(){
       
     return  s;

    }
 
}

 

2)、懒汉式:(面试时会用)

class  Single2{
  
//类加载进来没有对象,只有调用getInstance方法才会创造对象
    private  static Single2  s;
  
    private  Single2(){}
   
     public   static  Single2   getInstance(){

         if(s==null){
         
      s=new Single2();
           }
        return  s;
     }

}

在getInstance()方法中我们可以做一些判断来决定是否返回Single2的对象,实现了对单例对象的可控性。

 

 

 

以上是关于java学习之面向对象的主要内容,如果未能解决你的问题,请参考以下文章

JAVA学习之面向对象

java学习之面向对象

Java学习之面向对象一

java基础学习之面向对象

java学习之面向对象

探索java敏捷学习之道