`
百合不是茶
  • 浏览: 354801 次
社区版块
存档分类
最新评论

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

阅读更多

 

 

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

 

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

 

类和对象的基础概念:

 

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
分享到:
评论

相关推荐

    易语言源码易语言对象的DLL传递源码.rar

    在这个“易语言源码易语言对象的DLL传递源码.rar”压缩包中,包含的是关于易语言如何通过DLL(动态链接库)进行对象传递的源代码示例。 DLL是Windows操作系统中的一种共享库机制,允许不同程序之间共享代码和数据,...

    易语言指针传递对象

    易语言是一种国产的编程语言,它的设计目标是让编程变得简单、直观,尤其适合初学者。在易语言中,指针传递对象是一个重要的概念,它涉及到程序中的数据传递和内存管理。下面我们将深入探讨这个主题。 一、指针传递...

    js初学者入门

    本文将根据提供的文件内容,深入讲解JS初学者需要掌握的基础知识。 首先,了解JS在HTML中的插入方式。`<script>`标签可以放置在HTML文件的任意位置,但当浏览器解析到`<script>`时会暂停HTML解析,执行脚本。为避免...

    struts调用流程总结,适用于初学者.

    初学者理解这个流程对于深入学习Struts框架和构建基于Struts的应用程序至关重要。在实际开发中,开发者需要确保Action类是线程安全的,因为可能有多个用户同时使用同一个Action实例。此外,合理使用ActionForm的验证...

    C#初学者试题

    【C#初学者试题】是针对刚刚接触C#编程语言的学习者设计的一系列问题,旨在帮助他们巩固基础知识,包括类和对象、实例化、命名空间、方法定义、参数传递、引用类型、代码注释、readonly修饰符、静态成员、面向对象...

    易语言源码易语言COM对象调用JS接口源码.rar

    易语言是一种专为中国人设计的编程语言,它以简明的中文语法,降低了编程的门槛,使得更多非专业程序员...如果你是易语言的初学者,这是一个很好的实践案例;如果你是资深开发者,这个源码也能提供一些新的思路和技巧。

    java初学者完整代码+注释5

    初学者需要理解类的定义、对象的创建以及封装、继承和多态这三大面向对象特性。 3. **方法与函数**:在Java中,方法是完成特定任务的代码块。学习如何定义、调用方法,以及参数传递(按值或按引用)是初学者必须...

    易语言源码易语言免注册调用com对象源码.rar

    总的来说,这个压缩包中的源码是一个宝贵的教育资源,适合初学者和有一定基础的易语言开发者,通过阅读和分析源码,可以深入理解易语言免注册调用COM对象的实现方式,提升编程能力。在学习过程中,建议结合易语言的...

    java初学者代码

    这个“java初学者代码”压缩包可能是为了帮助新接触Java的人提供一系列简单实用的示例代码,以促进理解和实践。下面我们将深入探讨Java语言的一些核心知识点,以及这些代码可能涵盖的主题。 1. **基础语法**:Java...

    180个针对Java初学者的简单实例.rar

    通过实例,初学者可以学习如何定义、调用方法,理解参数传递和返回值的概念。 5. **类与对象**:面向对象是Java的核心特性,实例会展示如何创建类、实例化对象,并通过对象调用方法和属性。此外,封装、继承和多态...

    Java初学者的天堂_面向对象基础_ppt

    这个“Java初学者的天堂_面向对象基础_ppt”压缩包文件提供了一个详细的教学资源,帮助新手快速理解和掌握Java编程的基本语法和面向对象编程的核心思想。 首先,Java的基础语法是学习的基石。这包括变量声明、数据...

    初学者好玩儿的小程序

    初学者需要理解如何声明、定义和调用函数,以及指针的概念,包括指针的运算和传递。 3. **面向对象编程**:C++引入了类和对象的概念,实现了封装、继承和多态。通过创建类来定义对象的属性和行为,通过对象实例化来...

    C++编程初学者入门解惑

    通过阅读《C++编程初学者入门解惑》,初学者可以系统地学习C++语言,逐步解决在编程过程中遇到的问题,从而扎实地建立起C++编程基础。这本书不仅适合自学,也适合作为高校计算机科学课程的辅助教材。无论你是零基础...

    初学者学习的c++

    标题“初学者学习的C++”暗示了这个压缩包资源可能是针对C++入门者设计的一系列教程或项目,旨在帮助初学者逐步理解C++语言的基础知识。描述中提到的“基本都是基础的C++的内容”,意味着这些资料可能涵盖了C++的...

    易语言大漠找图找色对象调用例子

    易语言是一种以中文编程为特色的程序设计语言,其设计目标是让编程更加简单、直观,适合初学者。在本例子中,“大漠找图找色对象调用”...对于想要在自动化测试或者游戏辅助领域探索的初学者,这是一个值得尝试的组合。

    C++初学者指导

    对于初学者而言,掌握C++的基本语法、面向对象特性、标准库的使用以及良好的编程习惯是至关重要的。 1. **C++基础语法** - 变量和数据类型:C++支持多种基本数据类型,如int、float、double等,以及自定义的数据...

    J2EE初学者需要注意的问题《推荐》

    ### J2EE初学者需要注意的问题 #### 一、J2EE提出的背景及重要性 ##### 企业级应用框架的需求 J2EE(Java 2 Platform, Enterprise Edition)最初是为了满足企业级应用的需求而诞生的。在传统的软件开发过程中,很...

    java新手代码适合初学者简单经典.zip

    这个名为"java新手代码适合初学者简单经典.zip"的压缩包包含了两个示例文件:test1.java和test2.java,它们很可能是为帮助初学者理解Java编程基础而设计的一些简单程序。 1. **Java基础** - **变量与数据类型**:...

    java初学者学习源代码

    这个"java初学者学习源代码"集合提供了一些简单的运行代码示例,帮助初学者通过实践来学习。 1. **基本语法与数据类型**:Java有八种基本数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、...

    java练习题,适合一些java初学者

    Java编程语言是面向对象的、跨平台的编程语言,对于初学者来说,它提供了一个良好的学习曲线,因为它的语法简洁且易于理解。本资源包"java练习题"旨在帮助那些刚开始接触Java的人巩固基础,提升编程技能。这些练习题...

Global site tag (gtag.js) - Google Analytics