问题描述
- 第一次学java,有一些不懂地方。请各位帮我解答一下。
-
看视频看到多态性那边了。但是对对象的向上转型和向下转型的概念还是模糊不清的,有没有好心人给我解释一下。
还有一个问题:
比如有一段代码如下:class Info{ // 定义信息类 private String name = "ABCD"; // 定义name属性 private String content = "JAVA讲师" ; // 定义content属性 private boolean flag = false ; // 设置标志位 public synchronized void set(String name,String content){ if(!flag){ try{ super.wait() ; }catch(InterruptedException e){ e.printStackTrace() ; } } this.setName(name) ; // 设置名称 try{ Thread.sleep(300) ; }catch(InterruptedException e){ e.printStackTrace() ; } this.setContent(content) ; // 设置内容 flag = false ; // 改变标志位,表示可以取走 super.notify() ; } public synchronized void get(){ if(flag){ try{ super.wait() ; }catch(InterruptedException e){ e.printStackTrace() ; } } try{ Thread.sleep(300) ; }catch(InterruptedException e){ e.printStackTrace() ; } System.out.println(this.getName() + " --> " + this.getContent()) ; flag = true ; // 改变标志位,表示可以生产 super.notify() ; } public void setName(String name){ this.name = name ; } public void setContent(String content){ this.content = content ; } public String getName(){ return this.name ; } public String getContent(){ return this.content ; } }; class Producer implements Runnable{ // 通过Runnable实现多线程 private Info info = null ; // 保存Info引用 public Producer(Info info){ this.info = info ; } public void run(){ boolean flag = false ; // 定义标记位 for(int i=0;i<50;i++){ if(flag){ this.info.set("ABCD","JAVA讲师") ; // 设置名称 flag = false ; }else{ this.info.set("mldn","www.mldnjava.cn") ; // 设置名称 flag = true ; } } } }; class Consumer implements Runnable{ private Info info = null ; public Consumer(Info info){ this.info = info ; } public void run(){ for(int i=0;i<50;i++){ this.info.get() ; } } }; public class ThreadCaseDemo03{ public static void main(String args[]){ Info info = new Info(); // 实例化Info对象 Producer pro = new Producer(info) ; // 生产者 Consumer con = new Consumer(info) ; // 消费者 new Thread(pro).start() ; new Thread(con).start() ; } };
不懂的地方是: private Info info = null ;
变量info的类型使用了类Info,为什么要这么用呢?这样做的作用是什么?
解决方案
自己定义的类型和系统类库的类型以及基本类型本质上没有区别。定义出来可以接受这个类型(以及派生类型)的对象实例,调用方法,使用字段。
解决方案二:
这很正常,好比
String string = "a";
为什么string是String类型呢?只要不是关键字,你完全可以这么定义,Java区分大小写。
解决方案三:
你应该吧基本类型和引用类型看一下,java是面向对象编程
解决方案四:
你的类名称不就是Info嘛,就是定义Info类型的一个变量吧
解决方案五:
作为类的一个属性呗,方便你进行一些进程操作,为以后的代码提供信息。而且不=null也没事,类里面的成员变量,都是会自动初始化的。
时间: 2024-08-30 13:35:32