当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

调用对象是否需要传递对象(初学者一定要注意这个问题)

发表于: 2014-08-17   作者:百合不是茶   来源:转载   浏览:
摘要:     类和对象的简单的复习,在做项目的过程中有时候不知道怎样来调用类创建的对象,简单的几个类可以看清楚,一般在项目中创建十几个类往往就不知道怎么来看   为了以后能够看清楚,现在来回顾一下类和对象的创建,对象的调用和传递(前面写过一篇)   类和对象的基础概念:   JAVA中万事万物都是类 类有字段(属性),方法,嵌套类和嵌套接

 

 

类和对象的简单的复习,在做项目的过程中有时候不知道怎样来调用类创建的对象,简单的几个类可以看清楚,一般在项目中创建十几个类往往就不知道怎么来看

 

为了以后能够看清楚,现在来回顾一下类和对象的创建,对象的调用和传递(前面写过一篇)

 

类和对象的基础概念:

 

JAVA中万事万物都是类 类有字段(属性),方法,嵌套类和嵌套接口 是在其它的类或接口中声明的内部声明的类与接口

 

  a,类的修饰符  ;public private  protected  默认的

  

  b,字段:final 最后的不可变的,修饰方法,属性,

  

  static:静态字段:在调用的时候不需要创建对象,而是通过类名直接调用方法

  ,静态字段是共享的,只要改变一个全部都改变,静态字段不可以在main方法中使用

  

  //静态字段,直接通过类名调用

 

 public  class Demo{
   public static void main(String[] args){
     Demo.init();
   }
   public static void init(){
   System.out.println("我是一个静态方法");
   }
  }

 

  

  //静态字段不可以用在main方法中

  

  

  

  

       非静态字段:

 

 

  类的初始化:

    类除了简单的初始化之外,类还可以含有构造器,构造器是一个语句块,用来在new将对象的引用

    返回之前初始化对象,

   

 class demo{
     public int count;
     private static long nextID = 1;
     demo(){
       count  = nextID ++;
     }
    }

 

  

   初始化块

      class demo{
     public int count;
     private static long nextID = 1;
     {
       count  = nextID ++;
     }
    }

 

    

    

  静态初始化:

  

     

class demo{
     public int count;
     private static long nextID = 1;
     static{
       count  = nextID ++;
     }
    }

 

    

    

    方法异常与返回;

     当调用方法时,控制流从调用的方法传入被调用的方法,被调用的语句将按照它们的语义顺序执行

     ,当遇到下列三种请款时,方法将结束执行并返回给调用者:执行return语句,到达方法结尾,

     抛出为捕获的异常

     

     

   

   对象在A中创建  AA   a = new AA()   ,B类需要A类中的a ,可以直接将AA  a;设置为B类的属性就可以? 看下面的代码,:

 

package 类和对象;
/**
 * 
 * @author Administrator
 *构造方法及this的使用
 */
public class Animal {
int legs;
String name;
//第一个构造方法
Animal(){
this("狗",4);  //使用this调用Animal(String , int)构造方法;
System.out.println("不带任何参数的构造方法");
}
//第二个构造方法
Animal(String name){
this(name,4);  //使用this调用Animal(String , int)构造方法;
System.out.println("需要带参数的构造函数");
}
//第三个构造方法
Animal(String name,int legs){
this.name = name;
this.legs = legs;
System.out.println("需要两个参数的构造函数");
}
void play(){
System.out.println(name +"有" + legs + "条腿");
}
}

 //

主方法  启动线程

package 类和对象;

public class AnimalTest {
//主方法
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal dog = new Animal();

Animal cat = new Animal();
Animaldemo de = new Animaldemo();
de.start();
}

}

 

//线程类,线程没有传递参数;

package 类和对象;
//线程类
public class Animaldemo extends Thread {

private Animal dog;
private Animal cat;
private boolean islive = true;

@Override
public void run() {
try {
while (islive) {
                 dog.play();
                 cat.play();
}
} catch (Exception e) {
islive = false;
e.printStackTrace();
}
}

}

 

//运行结果;
需要两个参数的构造函数
不带任何参数的构造方法
需要两个参数的构造函数
不带任何参数的构造方法
java.lang.NullPointerException
at 类和对象.Animaldemo.run(Animaldemo.java:22)

分析:在线程中创建了main方法中创建的对象,但是线程在主函数创建的时候没有将需要的对象传给线程
导致线程中的对象是null;  初学者经常会遇到这样的问题

 

解决方法有两个:

第一个:是通过在创建线程的时候将对象传给线程,线程启动构造函数来接收

 1,创建线程的时候传递参数

package 类和对象;

public class AnimalTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
Animal dog = new Animal();
Animal cat = new Animal();
Animaldemo de = new Animaldemo(dog, cat);

de.start();
}

}

 

package 类和对象;
//线程类
public class Animaldemo extends Thread{
//通过线程传递
private Animal dog;
private Animal cat;
public Animaldemo(Animal dog,Animal cat){
this.dog = dog;
this.cat = cat;
}
private boolean islive = true;

@Override
public void run() {
try {
while (islive) {
                 dog.play();
                 cat.play();
}
} catch (Exception e) {
islive = false;
e.printStackTrace();
}
}

}

运行结果;
需要两个参数的构造函数
不带任何参数的构造方法
需要两个参数的构造函数
不带任何参数的构造方法
狗有4条腿
狗有4条腿
狗有4条腿
狗有4条腿
.......

 

 

第二个:对象直接在线程中创建

//主函数

package 类和对象;

public class AnimalTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
Animaldemo de = new Animaldemo();
de.start();
}

}

 

//

package 类和对象;
//线程类
public class Animaldemo extends Thread {
//在线程中创建对象
Animal dog = new Animal();
    Animal cat = new Animal();
private boolean islive = true;

@Override
public void run() {
try {
while (islive) {
                 dog.play();
                 cat.play();
}
} catch (Exception e) {
islive = false;
e.printStackTrace();
}
}

}

 

 

运行结果:

需要两个参数的构造函数

不带任何参数的构造方法

需要两个参数的构造函数

不带任何参数的构造方法

狗有4条腿

狗有4条腿

狗有4条腿

狗有4条腿

.......

 

 

 

 

 

    

 

  

 

调用对象是否需要传递对象(初学者一定要注意这个问题)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
搞Java开发三年多了,工作换了几份,工作地点也从深圳变动到了长沙。目前又到了一个多事之秋,估计
下面这个示例使用了WCF去创建一个服务端口从而能够被ASP.Net页面通过jQuery的AJAX方法访问,我们将
本文详细介绍了如何使用WCF去创建一个服务端口,从而能够被ASP.Net页面通过jQuery的AJAX方法访问。
我们知道在.net里class是引用类型,在函数参数表中的对象传递的都是对象的引用,所以在函数体内对其
我们知道在.net里class是引用类型,在函数参数表中的对象传递的都是对象的引用,所以在函数体内对其
写在前面的话,前两天有个朋友在QQ上问我 如何获取主角面朝方向一定区域中的敌人对象。这个命题看似
jQuery调用WCF服务传递JSON对象 [原文]Passing a JSON object to a WCF service with jQuery Jiang,
一、方法封装 //post json数据 //返回json格式字符串 exports.postJson = function (url, data, fn)
在开发flex期间. 我们会经常涉及到页面之间的调用.和参数的传递. 方法有多种 最常见的有两种. 但是
public class MyRunnable implement Runnable{ public void run(){ while(true){ System.out.printl
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号