设置-第一次学java,有一些不懂地方。请各位帮我解答一下。

问题描述

第一次学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

设置-第一次学java,有一些不懂地方。请各位帮我解答一下。的相关文章

第一次学Java但不知怎么写 这段代码 请高手指教 感谢万分啊

问题描述 请输入一段字符(一下从控制台输入)河山只在我梦中,祖国已多年未亲近,可是不管怎么样也改不了,我的祖国心.洋装虽然穿在身,我心依然是中国心.请输入要查询的字符串我(从控制台输入)最后出现如下:我出现的位置:42943请问高手这段Java代码怎么写刚学但不会写还有小弟没积分所以给不了望各位别介意 解决方案 解决方案二:望各位好心人帮帮忙啊解决方案三:数组查询问题:可以直接调用方法的:控制台输入的那些存储到一个string数组里:然后查找"我"字的下标就可以了啊:charat:好像

JAVA传值的问题,请牛人帮忙解答

问题描述 通过实体类GET出两个值传到A方法中,假设传的值为1,abc. 在方法体使用这两个变量的时候结果发现输出的值都为1. 不知道什么原因.. 分都在这里了. 问题补充: 还是谢谢你们 问题已经解决了.. 调用借口的时候,不知道谁把我传的值给覆盖了. 郁闷了半天 都是牛人,我的分也就这么点.. 我就随便给了哈 解决方案 贴出简单代码解决方案二:贴代码吧,问题解决不了那描述多半也是片面的.解决方案三:有代码,有真相,速递代码.解决方案四:代码啊,代码,贴出来,光描述怎么能了解呢.解决方案五:设

请各位帮帮忙Java项目报错求解

问题描述 如果在页面有自增列,提交时直接就报java.lang.IllegalArgumentException:argumenttypemismatch错不进入action中如果去掉那个自增列也就是不写那一列就报序列不存在但是可以进入action中用的ssh框架oracle中自增列类型为number生成实体类中的类型为java.math.BigDecimal不只是什么类型是不是oracle中的自增列设置的有问题不知道是什么原因请各位帮帮忙.主要是添加和修改时报错,查询和删除都正常.

java javase socket-最近学java,在socket 程序的测试时搞不懂,求指点

问题描述 最近学java,在socket 程序的测试时搞不懂,求指点 我最近在学java,刚好学到了socke程序,我按照教程上写了服务端和客户端的程序,但是在进行联合俩个程序进行通信的时候却测试不了了. 服务端代码: package severDemo; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public cla

web.xml-刚开始学java,现在看一个项目看不懂到底用什么框架

问题描述 刚开始学java,现在看一个项目看不懂到底用什么框架 看起来是spring,但是又觉得有点不同,请帮我看一下,下面是web.xml文件内容和springContext <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.s

编程零基础,学JAVA不知道如何着手

问题描述 编程零基础,学JAVA不知道如何着手买了一些书,下载了一些视频,按照上面的语法再写,不知道写这些有没用,要写到什么时候 解决方案 解决方案二:写到入门就差不多了.接着就可以学j2ee!解决方案三:有用,多练习~解决方案四:寫到你自己覺得夠了,就試著做些系統或應用程式,然後你就會發現自己哪裡沒學好了.解决方案五:我基本上按照书上写写,改一改,把意思给了解了不知道这样的学习方式如何或者给小弟一些建议解决方案六:如果编程基础为0的话,我觉得还是报个培训班好些.如果有编程基础的话,那么就跟着书

正在学java 后台传到前台的中文为??? 这是个什么鬼 在线等

问题描述 正在学java 后台传到前台的中文为??? 这是个什么鬼 在线等 后台代码如下: public String paging(){ HttpServletRequest req=ServletActionContext.getRequest(); HttpServletResponse resp=ServletActionContext.getResponse(); int pageIndex=Integer.parseInt(req.getParameter("pageIndex&qu

从零开始学 Java (一) Hello World 左光 2005.4

从零开始学 Java  (一) Hello World     左光 2005.4 从昨天开始学习 Java,把自己在学习中遇到的一些问题和体会发出来,供大家借鉴. 要想编写一个 Java 版的 Hello World  程序并运行需要完成下面两步: 1.下载并安装JDK5.0 或者 JDK1.4.2 .不要对版本号产生什么疑问,据我的理解,JDK5.0 也就是JDK1.5 ,是 JDK1.4.2 的重要升级,里面加了许多新的语言特性,为什么叫 5.0 而不叫1.5 ,我想可能是出于商业上的考虑

该学Java或.NET?

自从.NET问世以来,程序员都很关心的一个问题是「该学Java或.NET」.我也在挣扎,该「该继续Java的研究,或者该开始准备培养.NET的知识」. 当然,最好是能两者兼顾,但是每个人的时间都很有限,想要兼顾两者,其实不太容易.投入在.NET的时间越多,所能花费在Java的时间自然就少了,反之亦然.在信息爆炸的时代,重要的不是信息的取得,而是信息的抉择.信息太多,时间太少,如果不能慎选适合的技术,只会平白浪费许多时间,斫丧自己的竞争力. 由于我喜新厌旧的个性使然,过去这两年半,我着实花了不少时