类和对象的简单的复习,在做项目的过程中有时候不知道怎样来调用类创建的对象,简单的几个类可以看清楚,一般在项目中创建十几个类往往就不知道怎么来看
为了以后能够看清楚,现在来回顾一下类和对象的创建,对象的调用和传递(前面写过一篇)
类和对象的基础概念:
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条腿
.......
相关推荐
在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,...
模拟实现基于文本界面的《员工管理系统》。 该软件能够实现对员工对象的插入、修改和删除(用数组实现),...该初学者阶段则是需要掌握:用循环保证程序的不断运行、方法的调用、字符串处理的常见方法、键盘录入和输出
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 ...
如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”,由于“指向指针的指针”这个概念不容易理解,我们也可以用函数返回值来传递动态内存。 常常有人把return语句用错了。这里强调不要用return语句...
这些问题对于认真学习java的人都要必知的,当然如果你只是初学者就没必要那么严格了,那如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。 一、到底要怎么样初始化! 本问题讨论...
C#winform窗体间传值,三种方法示例,注释详细。使用方法:使用vs2013打开编译运行即可;...方法2与方法3即为发布订阅模式(观察者模式)----我也是设计模式的初学者,如有问题欢迎大家email我,谢谢;
比较适合初学者,我本人觉得不错,希望对大家有用! 教程会一行一行的解说,如: 一行一行地解说 #include 这一行包含了QApplication类的定义。在每一个使用Qt的应用程序中都必须使用一个QApplication对象。...
2.22 有关对象的思考:确定问题中的对象 小结 术语 自测练习 自测练习答案 练习 第3章 函数 3.1 简介 3.2 C++程序组件 3.3 数学函数库 3.4 函数 3.5 函数定义 3.6 函数原型 3.7 头文件 3.8 随机数产生器 ...
2.22 有关对象的思考:确定问题中的对象 小结 术语 自测练习 自测练习答案 练习 第3章 函数 3.1 简介 3.2 C++程序组件 3.3 数学函数库 3.4 函数 3.5 函数定义 3.6 函数原型 3.7 头文件 3.8 随机数产生器 ...
Python全栈开发实战教程是一本专为初学者设计的教程,适合想要入门Python开发和实战的读者。这本教程包含了详细的语法介绍和实战代码,帮助你从零开始,逐步掌握Python开发的各个方面。 主要内容包括: 第一章 ...
应用开发基本问题(初学者问答) 31 为什么启动不了应用 31 为什么创建对象总是失败 31 程序架构基本规范 31 程序结构标准化的需要 31 主程序结构不合理 31 窗口参数结构传递不合理 32 应用...
学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 160 5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 ...
对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该以合理的方式安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。尽量买翻译的书,因为这些书一般都比较易懂,而且语言比较...
本书每一章中都用大量实用性较强的例题阐述基本知识点,同时在每章的最后都提供一个有一定难度且趣味性较强的综合实例,将本章中多个知识点有机地结合起来,力求读者能把理论与实践紧密结合,体会解决实际问题的过程...
Web开发不像软件开发,Web应用实际上是没有状态的,这就说明Web应用程序不自动指示序列中的请求是否来自相同的浏览器或客户端,也无法判断浏览器是否一直在浏览一个页面或者一个站点,也无法判断用户执行了哪个操作...
应用开发基本问题(初学者问答) 31 为什么启动不了应用 31 为什么创建对象总是失败 31 程序架构基本规范 31 程序结构标准化的需要 31 主程序结构不合理 31 窗口参数结构传递不合理 32 应用...
在本书中,斯坦福大学教授、著名的计算机科学教育领导者Eric S.Roberts着重强调了更适合于初学者的友好讲解方式,使用ACM Java库简化编程。本书简练清晰地介绍了传统CS1课程的内容,同时也包含了最近的Computing ...