美文网首页计算机
Java 初学者问题集

Java 初学者问题集

作者: Richardo92 | 来源:发表于2017-09-06 14:55 被阅读113次

    最近一个朋友从文科改行学计算机,为了能找到一份起薪比较高的工作。学习计算机的第一门课,就是 面向对象编程,Java. 他的思路是文科生的思路,过去的二十几年里也从来没有接触过计算机,编程。很多我们觉得理所当然的东西,他都无法理解。

    他问了我很多稀奇古怪的问题,有些我甚至不知道该如何回答,就好像,两点之间直线最短,一般,难以解释的公理。

    但仔细想了想,任何人,在接触一个新新世界时,他们的思维轨道,概念认识,都是完全未设置的。所以,很多我们觉得理所当然的事,他们无法理解。也因为无法理解,让他们对这个领域敬而远之。把编程这么一个简单有趣又能赚大钱的领域,当做了一件很复杂的事。就好像高中时候的物理。明明那么自然的物理公理,那么简单的题目,但是有多少人是多么的害怕物理。归其根本,还是因为,他们的思维轨道并没有被设置好。

    这篇文章将从许多“傻逼”的问题入手,讲讲这个计算机世界。讲到哪里算哪里。也欢迎初学者在这里提问。作为一个同样刚刚转行一年的小菜,或许我能理解你们的不理解。

    1. public static void main 是啥意思?不是正常应该是 system.out.println() 或者 import 之类的吗?

    唔。。。这个问题我很无语。提问者很明显没有好好看过参考书,稍微一不理解,就开始问了。这是个很不好的习惯。在程序领域,需要极强的学习能力。很多时候没人会给你解释,需要你自己在网上搜索答案,整理各个人的意见,归纳出答案。所以,我就不解答这个问题了。

    唔。。。Just kidding.
    这个问题,就是所谓的跨行业人群的稀奇古怪又不好意思问老师的问题吧?

    在面向对象的世界里,类就好像是图纸,而对象,就是照着这个图纸打造出来的一辆车。一张图纸可以打造出无数辆车。这些车的实现细节完全相同,但是,他们确实不同的车。

    假设你现在有辆车。车上有方向盘,油门,刹车,等等。他们都是精密的仪器。设计者花费了大量的心血设计了他们。那你要怎么用他们呢?

    坐在车里面?似乎没有用到他们。
    推着车走?似乎没有用到他们。
    发动车?没错,你可以开始用到方向盘,油门,刹车了。
    public static void main(String[] args) {...} 就是这么一个发动器。
    只有通过这个发动器,接下来,你才能来使用设计好的方向盘,油门,刹车。
    用更简单的语言来说, main() 是程序的入口。你在这个函数里,去定义你的逻辑,去做一切你想做的事。
    比如,我有一个类

    public class Car {
         public void drive() {
             System.out.println("Drive......")
         }
        
         public void brake() {
             System.out.println("Brake......")
         }
    
         public void turnLeft() {
             System.out.println("Turn left......")
         }
    
         public void turnRight() {
             System.out.println("Turn Right......")
         }
    
         public void backward() {
             System.out.println("Backward......")
         }
    }
    

    我有这么个类。他是图纸。计算机不知道你要用它来干嘛,你会有哪些行为。所以,你需要在 main() 里面,定义你想要的行为,或者,逻辑。
    比如,我想让车先往前开,再左转,再右转,再倒车,最后停下。你就需要在 main() 里面定义这个行为,或者说,逻辑。

    public class Car {
         public void drive() {...}
         public void brake() {...}
         public void turnLeft() {...}
         public void turnRight() {...}
         public void backward() {...}
    
        public static void main(String[] args) {
            Car corolla = new Car();
            // 让车向前开
            corolla.drive();
    
            // 让车向左转
            corolla.turnLeft();
    
            // 让车向右转
            corolla.turnRight();
    
            // 让车向后退
            corolla.backward();
    
            // 让车停下
            corolla.brake();
        }
    }
    

    简而言之,main()是一个程序的入口。在这个函数里,我们定义了自己想要这个程序干嘛,即,程序的行为。
    而System.out.println(),就是行为之一,把一些东西打印出来。

    然后,在程序世界里有很多行为,比如这里的输出,还有输入,还有读文件,写文件,各种计算,数据结构。这些都是行为。为了更好的区分他们,我们把它们分门别类写进一个个包。每个包,定义了一种类型的行为。

    而 import, 就是在你的程序里,引用这些包的。比如你写好了一个类,轮胎。写好了一个类,方向盘。你会把他们放进两个package,
    到时候需要构造车的时候,就把他们 import 进来。方便便捷。

    package tyre;
    
    public class Tyre {...} 
    
    package wheel;
    
    public class Wheel {...}
    
    package car;
    
    import tyre;
    import wheel;
    
    public class Car {
        private Tyre mTyre = new Tyre();
        private Wheel mWheel = new Wheel();
    
        ....
    }
    
    1. int 什么什么 都是啥意思,为什么要 int
      面向对象最基本的就是类。但每个类,归根结底,都是由一个个基本的数据所定义的。比如车这个类,车长多少,车宽多少,马力多少,耗油量多少,等等。我们需要用数字去定义这些东西。
      Java里面一共有好几种数据类型,具体多少种我记不得了。
      比如,int, long, float, double 等等
      int, long 都是用来描述整数的,但他们的区别是,他们描述的范围不同。
      int 描述 [ - (2 ^ 32), (2 ^ 32) - 1 ], 超出这个范围的值,不可以被Int所描述。比如, 2^32, int 就无法描述这个值。
      long 描述 [ - (2 ^ 64), (2 ^ 64) - 1 ],超出这个范围的值,不可以被 long 所描述。比如, 2^64, long 就无法描述这个值。
      float 和 double 是用来描述小数的。和 int/long类似,float 范围小一些,double范围更大些。

    我们有了这些基本类型,才能真正从底层,从细节,去描述我们的类,我们的逻辑。

    1. 在一个code里,怎么看什么是class 什么是object 什么是 variable?
      类 永远是被 关键词 class 修饰的。
      比如之前的那段代码:
    public class Car {
         public void drive() {...}
         public void brake() {...}
         public void turnLeft() {...}
         public void turnRight() {...}
         public void backward() {...}
    
        public static void main(String[] args) {
            Car corolla = new Car();
            // 让车向前开
            corolla.drive();
    
            // 让车向左转
            corolla.turnLeft();
    
            // 让车向右转
            corolla.turnRight();
    
            // 让车向后退
            corolla.backward();
    
            // 让车停下
            corolla.brake();
        }
    }
    

    Car 就是 类,被class 修饰。
    然后我们用这个类,实例化了一个对象,object,叫做 corolla.
    variable的定义更广泛些。他表示任何可以改变的量。之前说过的 int,long,double,float 都可以用来描述变量。

    int a = 10;
    a = a + 10;
    System.out.println(a); // 20
    

    这里 a 从10变成了20. a 其实就是一个变量。

    对象同样可以是变量。

    Car corolla = new Car();
    corolla = new Car();
    

    一开始 corolla指向一辆新车,接着我们又让它指向另一辆新车。这个corolla指向的对象,发生了变化。所以,对象,同样可以是变量。

    1. scanner keyboard = new scanner(system.in), amount = keyboard.nextInt() 是干嘛用的?
      当我们需要用户输入时,我们就得用 scanner.
      system.in 是输入流。我们构造scanner这个对象,需要制定输入流。所以我们把咱们系统的输入流作为参数,传入给scanner来构造对象。
      之后,这个对象就会来捕捉你系统的输入。
      当代码执行到这行时,
    amount = keyboard.nextInt();
    

    会自动停下,等待你的输入。
    你在键盘上输入一个数字,按下回车。scanner会认为你这次输入结束。然后把你输入的这个数字传进给程序里,以作下一步打算。
    应用情景有太多了。比如你打客服的时候,经常会给你许多选择。比如,按1是干嘛干嘛,按2是干嘛干嘛。
    这个时候程序会停在那里,等待你的输入。
    当你输入1并按下确认键时,程序默认你的这次输入结束。拿到你输入的数字1,然后跳转到处理 option 1 的代码逻辑。

    今天就解释到这里。

    相关文章

      网友评论

        本文标题:Java 初学者问题集

        本文链接:https://www.haomeiwen.com/subject/oiamjxtx.html