A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏夜猫 中级黑马   /  2013-8-22 21:16  /  3291 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏夜猫 于 2013-8-23 19:35 编辑

励志进入黑马,现阶段在传智播客上JAVA基础班的新手一名,诚心求解。

最近课面向对象快上完了,可是脑子里对很多东西的感觉似懂非懂,总是觉得单独分开讲,定义、格式、作用都能分得清楚,但是写在一个源代码里面,相互创建、调用后组成一个完整的部分,就懵了。

关于在一个源代码里定义多个类,然后根据需要创建对象,再相互引用最后达到完成题目要求的整个过程,总觉得不知道从哪里开始着手。

主要疑惑例如:
1、对象究竟是类里面的什么东西?可以出现在类中的哪些位置?什么时候需要创建?
2、类创建时会先创建一个带有main方法的类,然后根据题目的要求添加创建其他的类,这些类是并列关系么?(就是相互写在上下会不会影响程序编译和运行)
3、创建好需要的类以后,会在main方法以外的类中写出类的基本成员属性(例如class Person{ int age;  String name;}),但是之后的方法调用具体需要写在这个类中还是含有main函数的类中?为什么要写在那里?
4、写出的这些方法,什么时候需要写成员方法,什么时候需要写构建方法?具体写在哪里?

我自己能总结出来的就这些,也许其中会包含一些诸如“Java究竟是什么”这么空的搞笑问题,但是确实是我现在脑子里存在着的疑惑。上面也有一些问题是我课后复习看老师讲解习题后发下来的源代码,很多当时懂,但是再看就不知道哪对哪的了(调用关系)。

本来是想发帖球技术分的,但现在真怕自己跟不上学习进度,连基础都学不好,要技术分也没用,我本人是零基础来上课的,来上课前自学的部分只把老毕的helloworld给看完,因为想改变生活因为哥们的推荐和鼓励,告诉我只要努力就能成功。。

跪求大神能帮我找出梳理这些东西的方法{:soso_e183:}

评分

参与人数 2技术分 +3 收起 理由
滔哥 + 1
黄兴旺 + 2 多练练就行了。

查看全部评分

25 个回复

倒序浏览
《1》比如一辆车 这就是一个对象 因为你看得到摸得到是一个实体 你知道它一些属性和方法
如果现在给你放在停车场你能看到各式各样的车 把他们共性的东西抽象出来这就是一个类
比如车有四个轮子 有颜色 有长宽 座位 等等 这是从多个实体抽象的过程
反之 当你需要一辆自己的车的时候 你只需要把类再次实例化成一个实体 类就犹如模型一样 具有大多数汽车共同具有的属性和方法 因为我想要一辆车 所以我从一个抽象的类里面又实现出来了一辆车 这就是对象。
可以出现在什么位置? 如果你需要你就可以通过new的方式 我要一辆新车 这种方式来实例化 然后填充好属性和方法 让对象饱满 这就有了一辆车了
至于什么时候创建 再打个比方 我现在有个Student学生类 里面具有一些属性 比如年龄 比如 姓名 还有就是一些动态的方法 吃饭 睡觉 看书等等。现在我在main方法中 进行了一次增加学生的方法 我需要在控制台输入年龄啊 姓名等信息 这个时候我们可以通过String name=xxxxxx 一段代码把名字赋值给一个变量。但是这个变量不能代表一个学生 因为他只是一个变量 在这个时候就需要通过new创建一个学生,Student stu=new  Student();然后通过stu.name=xxxx这才真实的把名字给了这个学生 不知道这么解释听不听的懂

评分

参与人数 1技术分 +2 收起 理由
黄兴旺 + 2 很给力!

查看全部评分

回复 使用道具 举报
《2》如果你用的是IDE工具比如MyEclipse 那是不支持在一个类中出现两个同等级的类的 会飘红报错。但用记事本确是没问题,实际开发我感觉应该也不会让你在同一个类中创建出两个类 至于老师之所以这么写也是方便教学 单一原则 一个类干一件事 类名必须跟文件名相同 错误的路有千万条 对的路只有一条 如果需要引用其他的类 最好还是新创建一个类实例化调用类的属性和方法
回复 使用道具 举报
《3》语文不好翻译不大懂你说的  你是创建好了需要的类 然后要在别的类中写这个类的属性 还是说创建好了一个类 我要在另一个不含有main方法的类中调用? 你的class Person是你所谓的创建好需要的类吗?如果是 那么里面的东西就是你这个类具有的属性。如果不是,那就是Person具有的属性 如果你要使用它 首先必须实例化才可以 。如果接下来你学到线程就知道了 main方法是java虚拟机运行线程接口 如果想让程序运行,必须从main入口进入 这样才可以 就比如你进家门 肯定是要从门进去的 不可能砸墙进门吧

从刚才来说 如果你现在有一个未知的需要的类 一个Person类 一个主方法入口类 你可以在这个未知的类中实例化Person 也可以在Person中实例化这个未知的类 互相调用public类型的属性和方法 但如果要程序运行 必须通过main方法 也就是说 我如果用未知类调用Person类 我必须在main类中实例化未知类或者Person类才能保证运行
回复 使用道具 举报
穿靴子的猫 发表于 2013-8-22 21:32
《1》比如一辆车 这就是一个对象 因为你看得到摸得到是一个实体 你知道它一些属性和方法
如果现在给你放在 ...

第一个疑惑关于车的举例和停车场很多车的举例很赞,很清晰了。谢谢
回复 使用道具 举报
《4》先说构造方法 如果在你没有定义任何构造方法的时候 会隐式存在一个无参的构造方法 构造方法的用处就是实例化对象 比如一个Person类 你定义了一个构造方法Person(String name,int age),这个时候如果你实例化对象的时候不带参数是不能实例化的 也就是说Student stu=new Student();是报错的 所以当你定义带参方法的时候最好把无参方法也写上 不然你是构造不出无参对象的。
成员方法就是动词 干某一件事 实现某一种功能 你在属性中定义了腿不代表就会走 定义了嘴不代表会说 因为腿和嘴都是名词 我不可能 腿=长跑 只能定义方法 跑的方法 或者行走的方法 当你需要的时候就必须定义方法了
比如一个学生朗读课文 我定义了嘴的属性 可以是String XXXX课文 但是这却不是说的方法 所以要定义一个朗读课文的方法可以 腿可以定义一条腿 两条腿 但是不可以定义成跑走跳 之类的动词 必须定义相应的方法
嘴可以定义成龅牙嘴 三瓣嘴 却不能定义说喊唱等动词 必须通过方法实现
回复 使用道具 举报
穿靴子的猫 发表于 2013-8-22 21:35
《2》如果你用的是IDE工具比如MyEclipse 那是不支持在一个类中出现两个同等级的类的 会飘红报错。但用记事 ...

嗯,关于这个老师也有说过,也可能是上课时写的太多,上下来回切给切晕了。。
回复 使用道具 举报
mian函数是一个独立的函数,程序运行的时候就会找main函数,main函数也是类里面的一个函数,只是它很特别,程序运行就会找它,它可以放到任何类。类就是class,类里放属性和方法,一个class类可被new成很多对象,调用类里的非静态方法需要用对象调用,对象是通过new class类出来的东西。
public class Person {
        int age = 1;String name ="abc";  //这个是类的成员。它的管的范围比局部变量大,大括号内都能管,离开大括号就管不了
        public void hello(){     //这是类的方法
                System.out.println("hello world!");
        }
        //mian函数,也叫方法是一个特别的方法,它不需要依赖任何类但是它必须放到一个类中,程序运行时就会找它
        public static void main(String[] args) {
                int age = 2;   //这个是局部变量 。它的范围也一样在大括号内
                Person person = new Person();  //new Person的对象
                person.hello();   //调用类里方法普通方法必须用new 对象来调用
                person.age = 3;  //操作类里变量,普通成员必须用new 对象来用。
        }
}

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
穿靴子的猫 发表于 2013-8-22 21:42
《3》语文不好翻译不大懂你说的  你是创建好了需要的类 然后要在别的类中写这个类的属性 还是说创建好了一 ...

想表达的意思应该是你说的第二种,大致了解方法调用过程了,回头我再多练练
回复 使用道具 举报
穿靴子的猫 发表于 2013-8-22 21:49
《4》先说构造方法 如果在你没有定义任何构造方法的时候 会隐式存在一个无参的构造方法 构造方法的用处就是 ...

构造方法的使用和理解还是有点难,成员方法清晰了 谢了{:soso_e183:}
回复 使用道具 举报
夏夜猫 发表于 2013-8-22 21:50
想表达的意思应该是你说的第二种,大致了解方法调用过程了,回头我再多练练 ...

相关访问权限应该有学过吧 只要是公有的就可以互相之间调用 不管你有几个类 你需要这个类的东西 而这个类的东西也是公有的 你就可以用 但最终运行必须在main方法之中走 哪怕你写出一大串代码比如class Person()

     public String name;
     public int age;

    public void say(){
       System.out.print(name+"年龄 "+age);
   }

class Student(){
   Person p=new Person();
   p.name="张三";
   p.age=21;
   p.say();
}
class Test(){
    public static void main(String[] args){
         //嘛都没干
   }

这个程序依旧没有办法运行
回复 使用道具 举报
夏夜猫 发表于 2013-8-22 21:53
构造方法的使用和理解还是有点难,成员方法清晰了 谢了

构造是实例化对象的入口 当你实例化的时候通过new关键字为什么比如Student stu=new Student();就可以new呢?后面的Student() 就是构造
但是我平时没有写这个方法为什么可以实例化对象呢?
这就是因为当你没有写的时候java会隐式存在一个无参构造 当你自己定义无参或者有参的构造方法的时候,java就不会给你隐式提供构造方法了所以如果我现在定义了一个有参的构造
public Student(String name,int age){
    this.name=name;
    this.age=age;
}却没有提供无参构造的时候 Student stu=new Student(); 是new不出对象的 会报错 因为你的构造带参数 会提示你参数个数不足必须这样才行
Student stu=new Student("张三",21);这样才可以
回复 使用道具 举报
你不会是八月八的同学吧。。。哈哈
回复 使用道具 举报
就拿毕老师最经典的例子来说吧   人就是一个类  但是具体到一个人就是一个对象  对象可以有很多的属性 对应的就是类里面的成员变量。人可以做事情 可以通过写一个方法来定义他的功能,用的时候直接调用就行了、这就是成员方法。。main是主函数 是程序运行的入口。。。具体定义成员变量和成员方法就看你需不需要这个功能了 需要了就定义呗
回复 使用道具 举报
一个铃,一颗珠 发表于 2013-8-22 21:49
mian函数是一个独立的函数,程序运行的时候就会找main函数,main函数也是类里面的一个函数,只是它很特别, ...

首先要谢谢你。
这样具体写出一个类,然后把每项的内容解释下确实对帮助我梳理知识很有用。
我还有些疑惑,可能是因为练习(敲)得少的原因吧,主要体现在课上老师一个源代码文件里面写出多个类,然后相互调用就会找不着北,回头我再研究下从开始创建到完成封装的步骤,尽量理顺
回复 使用道具 举报
穿靴子的猫 发表于 2013-8-22 22:00
构造是实例化对象的入口 当你实例化的时候通过new关键字为什么比如Student stu=new Student();就可以n ...

O了,感觉跟又上了一遍课似的,跪谢了!
回复 使用道具 举报
丶遇见另一个自 发表于 2013-8-22 22:17
就拿毕老师最经典的例子来说吧   人就是一个类  但是具体到一个人就是一个对象  对象可以有很多的属性 对应 ...

嗯嗯,老李的内存思考大法有时候跟不上,我回头也打算把老毕关于面向对象部分的视屏调出来啃一次看看能不能帮助我理顺,谢了,但愿8月8所有同学如愿达成目标,加油{:soso_e130:}
回复 使用道具 举报
夏夜猫 发表于 2013-8-22 22:23
嗯嗯,老李的内存思考大法有时候跟不上,我回头也打算把老毕关于面向对象部分的视屏调出来啃一次看看能不 ...

额 你不会真是我同学吧你叫。。。
回复 使用道具 举报
本帖最后由 张晓辉 于 2013-8-22 23:40 编辑

对象就是模拟现实生活中的事物,现实事物有他本身的特性,在java中它是实实在在的实例,里面有许多方法和属性,比方说一个类就是一个对象,类中有属性,有方法。
每个程序都必须有个main方法,因为它是虚拟机运行它的入口,找不到他就无法运行。
关于构造函数,类中创建方法,static{}静态应用,你问什么时候创建,当然是应用需要什么就创建什么,这个你看完毕老师的“对象初始化过程”可能就好理解了。你创建了一个类(对象),过程依次是,
1-执行static{}代码块,对类进行初始化,
2-对类中的属性进行初始化,例:类中 int age  所谓初始化就是创建,赋予初始化值,这里为0
3-对类中的属性进行显示初始化,例如:String name=“xiaoming”,name先进行初始化结果为null然后进行显示初始化,结果为"xiaoming"
4-对构造代码块进行初始化例如:person类中  person(){}括号内科进行初始化设置//如果没有定义,person(){}隐藏,默认初始化,值为空。
5对对象对应的构造函数进行初始化,例如:类外部 定义类person p=new person(10);数据10会传入相应的构造函数person(int age);构造函数中有方法对age进行了赋值this.age=age;所以属性age进行了初始化变为10
综上,他们都有各自的特性-功能,也有相应的运行顺序,到底什么时候应该有,必须有,甚至构建其他应用的方法,这个要看具体需求,用到了我就一个创建,其实要使用关键还是要知道他们的功能,ok,person(){}能进行初始化,好!我需要初始化的时候就在里面定义数据,方法等。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 赞一个!

查看全部评分

回复 使用道具 举报
对于函数的调用你可以看成是许许多多的超链接,比方说一个网站,我预先编辑了N多页面,在java中可以看成是N多方法,网站上有导航,你点什么,╮(╯▽╰)╭他就出来相应的链接,这点什么,是看你的需求的,你需要什么就点什么,在java中,你预先创建了N多用得到的方法,封装起来,比方说丢到了一个文件夹里面,在另外一个地方你想用到某个方法了,你就调用相应的方法、类方法,需要参数就传入参数。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马