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

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

阅读更多

 

 

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

 

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

 

类和对象的基础概念:

 

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

相关推荐

    Java初学者都必须理解的六大问题

    在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,...

    java员工管理系统初级,只涉及到知识点:类和对象(属性、方法)、类的封装、引用数组(对象数组)、数组的插入、删除 代码有注释

    模拟实现基于文本界面的《员工管理系统》。 该软件能够实现对员工对象的插入、修改和删除(用数组实现),...该初学者阶段则是需要掌握:用循环保证程序的不断运行、方法的调用、字符串处理的常见方法、键盘录入和输出

    Java初学者入门教学

    15.5.3 15.5.3 要注意的问题 15.6 Java与CGI的沟通 15.6.1 CGI数据的编码 15.6.2 程序片 15.6.3 用C++写的CGI程序 15.6.4 POST的概念 15.7 用JDBC连接数据库 15.7.1 获得学习示例 15.7.2 查找程序的GUI版本 15.7.3 ...

    c/c++ 学习总结 初学者必备

    如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”,由于“指向指针的指针”这个概念不容易理解,我们也可以用函数返回值来传递动态内存。 常常有人把return语句用错了。这里强调不要用return语句...

    Java的六大问题你都懂了吗

    这些问题对于认真学习java的人都要必知的,当然如果你只是初学者就没必要那么严格了,那如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。  一、到底要怎么样初始化!  本问题讨论...

    C# winform窗体间传值(使用委托或事件)

    C#winform窗体间传值,三种方法示例,注释详细。使用方法:使用vs2013打开编译运行即可;...方法2与方法3即为发布订阅模式(观察者模式)----我也是设计模式的初学者,如有问题欢迎大家email我,谢谢;

    QT的参考文档及其教程

    比较适合初学者,我本人觉得不错,希望对大家有用! 教程会一行一行的解说,如: 一行一行地解说 #include 这一行包含了QApplication类的定义。在每一个使用Qt的应用程序中都必须使用一个QApplication对象。...

    C++大学教程,一本适合初学者的入门教材(part1)

    2.22 有关对象的思考:确定问题中的对象 小结 术语 自测练习 自测练习答案 练习 第3章 函数 3.1 简介 3.2 C++程序组件 3.3 数学函数库 3.4 函数 3.5 函数定义 3.6 函数原型 3.7 头文件 3.8 随机数产生器 ...

    C++大学教程,一本适合初学者的入门教材(part2)

    2.22 有关对象的思考:确定问题中的对象 小结 术语 自测练习 自测练习答案 练习 第3章 函数 3.1 简介 3.2 C++程序组件 3.3 数学函数库 3.4 函数 3.5 函数定义 3.6 函数原型 3.7 头文件 3.8 随机数产生器 ...

    Python全栈开放实战教程

    Python全栈开发实战教程是一本专为初学者设计的教程,适合想要入门Python开发和实战的读者。这本教程包含了详细的语法介绍和实战代码,帮助你从零开始,逐步掌握Python开发的各个方面。 主要内容包括: 第一章 ...

    QUALCOMM平台BUIW开发文档

     应用开发基本问题(初学者问答) 31  为什么启动不了应用 31  为什么创建对象总是失败 31 程序架构基本规范 31  程序结构标准化的需要 31  主程序结构不合理 31  窗口参数结构传递不合理 32  应用...

    疯狂JAVA讲义

    学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 160 5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 ...

    C++MFC教程

    对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该以合理的方式安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。尽量买翻译的书,因为这些书一般都比较易懂,而且语言比较...

    程序设计基础(C) 视频.txt

    本书每一章中都用大量实用性较强的例题阐述基本知识点,同时在每章的最后都提供一个有一定难度且趣味性较强的综合实例,将本章中多个知识点有机地结合起来,力求读者能把理论与实践紧密结合,体会解决实际问题的过程...

    ASP.NET的网页代码模型及生命周期

    Web开发不像软件开发,Web应用实际上是没有状态的,这就说明Web应用程序不自动指示序列中的请求是否来自相同的浏览器或客户端,也无法判断浏览器是否一直在浏览一个页面或者一个站点,也无法判断用户执行了哪个操作...

    Qualcomm平台BREW开发技术文档

     应用开发基本问题(初学者问答) 31  为什么启动不了应用 31  为什么创建对象总是失败 31 程序架构基本规范 31  程序结构标准化的需要 31  主程序结构不合理 31  窗口参数结构传递不合理 32  应用...

    Java语言的科学与艺术 斯坦福大学经典教材

    在本书中,斯坦福大学教授、著名的计算机科学教育领导者Eric S.Roberts着重强调了更适合于初学者的友好讲解方式,使用ACM Java库简化编程。本书简练清晰地介绍了传统CS1课程的内容,同时也包含了最近的Computing ...

Global site tag (gtag.js) - Google Analytics