理解java的类

  不要去管什么面向对象还是不面向对象了,我认为面向对象这种概念很难用语言描述清楚,更多的是当你代码写多了,产生的一种直观的觉悟。你是去查资料也好,看视频也罢,先理解什么是类。然后自己尝试着写几个类。你不要去写什么Person类,Animal类了,有什么意思呢?随便打开一个网页,比如百度贴吧,你有百度账号的话,你就想想,一个百度账号会有哪些属性?用户名,密码,头像,是否可用,等等。用这些信息来写Java类。

 

一个Java类,无非就是属性和方法,大部分情况下,方法无非就是用来给属性赋值的。属性是干嘛用的,不就是用来存储数据的吗?你说对不对呢?Java有八种基本数据类型:分别为整型 int,短整型 short,长整型 long,字节型 byte,布尔型 boolean,字符型 char,单精度浮点数 float,双精度浮点数 double。

 

就比如说int,Java编译器规定int占四个字节,也就是4个byte,一个字节占8位,一个位就是一个bit。bit是计算机中最小的单位,它只有0和1两种状态。我们常说一个文件有多少兆,这个兆就是MB,1MB有1024KB,1KB有1024个字节。当你定义了一个int类型的变量,在运行的时候就会在Java虚拟机中申请一个4个字节的空间。1MB有1024KB,1KB有1024个字节。所以说1MB可以存放 (1024 * 1024 / 4) = 262144 个int变量。Java虚拟机的默认内存是64MB,所以最多应该能存放16777216个int类型的变量。当你定义一个int类型的变量,那么运行的时候,虚拟机的剩余内存就会被减掉4个字节。所以,属性是干嘛用的,我们在写Java类的时候,为什么要定义属性。我觉得没有别的含义了,定义属性就是为了存储数据的嘛。

 

我们写一个

 

private int a;

 

Java虚拟机(JVM)跑起来,一旦我们new了这个对象。这个a变量就会被放到JVM的内存中,然后JVM就会专门开辟一个空间,来装载这个数据。然后,我们才可以在计算机中操作这些个数据。你总不可能说,我有一个数字100,就要计算机对这个数字进行加减乘除的运算吧。计算机怎么知道这个事情呢?你是不是必须要告诉计算机有一个数字100,它才会知道?

 

为了装载这些数据,所以才有了八种基本数据类型,每一个数据类型就好比一个篮子,有的篮子大一点,比如long类型,可以放好长好长的数字。有的篮子小一点,比如byte类型,只能放一点点大的数字。Java类,我的理解就是一个模板,因为我学过JS,所以我会类比。但是这些类比,仅限于我个人,在此就不多说了。

 

Java类,,我更愿意把它称为一个 数据模板。它只是一个模板而已,不是一个实实在在的对象,这一点首先要确定。就好像工厂生产一个产品,首先是不是要有一个模板和设计图纸,这个模板决定了你这个产品是一种怎样的形状,以及可能会具备哪些功能?图纸则决定了功能的具体实现。比如生成一部手机,模板开出来就是一个扁平的长方体的样子,可是光有模板还不行,你还得规定它的一些具体细节。这些细节就好比是Java类的构造方法,以及其他的一些方法实现。

 

但是,你光给客户模板和图纸行吗?一般来说是不行的。

 

至于静态方法,我们知道,我们调用静态方法的时候,不需要先生成一个实例,可以通过类名直接调用。这就相当于,在弄模版的时候,这些功能就已经定制在里面了。你买手机的时候,里面不是经常有一些内置的应用吗?有些删都删不掉,这不就相当于静态方法吗?

 

(我只是举一个例子啊,你不要非得较真说我可以ROOT一下啊)

 

如果模板里面已经有了一些做好的功能,今后任何根据这个模具生成出来的产品也自带了这些功能。如果模板里面已经做好了一些功能,那么我的确可以使用这个模板,而不需要真正拿到一个产品。比如生产一部手机,它的模板里面已经做好了一个手电筒的功能,那么,你即便不给我一个真正的产品,仅仅给我一个模板,我是不是也可以用它的手电筒功能呢?

 

这就是静态方法。所以我们常说,静态方法和静态属性为所有实例共用,不就是这个道理吗?

 

所以,正常情况下,我们调用一个类的非静态方法,是不是必须要先new一个对象?

posted @ 2016-12-24 00:06  北湮  阅读(156)  评论(0)    收藏  举报