类与对象
2012六月末,我在蓝杰报名学习Java这种计算机编程语言,应熊哥等哥哥级老师的要求,也为系统的梳理学习内容,注册ITeye技术网站,开始撰写我的技术博客,以期日后自己回忆起来时,能找到自己钻研技术时的一些领悟和感触,当然也是一种大学时光的见证。因此,我将努力写好这段Java学习之旅的收获与感悟。
一、何为Java?它是干什么的?它...
简而言之,Java是一种计算机编程语言,这种语言因为具备“跨平台”和“免费开源”的优点在短短十几年的时间内获得了极大的发展,当然还包括了“面向对象”的编程方法和“简单易用(舍弃了C语言中麻烦的指针操作)”等优点,在编程语言的使用上也一度占据第一的宝座。
Java源程序的后缀是.java; Java编译后的文件是.class; Java的编译器是Javac(反正在DOS环境下是这样调用的)。
因为Java支持跨平台操作,所以在不同的操作系统下我们要配置不同的运行环境(JRE),内含Java虚拟机(JVM)。Java开发工具包(JDK)包含了Java运行环境和Java编译器,所以我们要安装JDK。
Java的集成开发工具(IDE)有Eclipse,Jcreater等。
二、Java中的基本数据类型等概念的理解?
Java中的基本数据类型有8种,要记住这几种基本类型他们所占的字节,以后是要经常用到的,这里跟C语言是不同的。
byte 1B
int 4B
short 2B
long 8B
char 2B
float 4B
double 8B
Boolean ture/false
数据类型转换一般存在于整数、浮点数、字符之间。规则是:
低精度的值可以直接赋给高精度的值,直接变成了高精度,这里的高精度一般认为是:
byte < short < char < int < long < float < double
2、高精度的值不可以直接赋给低精度的变量,为了解决这个问题,就要进行强制转换,方法是:
目标类型 变量 = (目标类型)值
String虽然不是8中基本类型,它是Java中的一个类,但是它的使用方法确是跟基本数据类型很相近,而且遵守值传递的规则。
三、什么是类?什么是对象?它们在内存中是如何存放和引用的?
类从字面上就能理解,就是一类东西,它们具备一些相同的特征和行为。而对象则可以这样理解,它是一个具体的东西,不是抽象起来的一类东西,而是这些具有相同特征和行为的一个具体的个体。
类用类名定义一个对象名,用new关键字来实例化一个对象,定义的过程中并不给分配内存空间,只有在实例化的时候才给分配一个空间,昨天晚上,其实应该叫今天凌晨,也就是两三个小时前,室友给我跟另一位室友分析了一下new在实例化对象时的内存分配情况。但new后的对象会在实际的内存中分配一定的空间。定义后的一个名称存放在高速缓存区,里面存放了它所指向的元素或者对象的地址。举个例子,生了一个小孩,给他起了名字,名字是放在一个地方的,他只是一个代号,代表了他所代表的小孩,而这个小孩是真正的一个对象。
四、什么是值传递?什么是引用传递?
这两个概念是这样区分的:值传递就是在内存中重新分配了一块内存,并把这块新内存的地址赋给了新的变量。引用传递就是把内存中存在的这个元素的地址直接传给了变量,并没有在内存中重新分配一块空间,所以美其名曰引用传递。但是,在值传递中还有一个特殊的String,它也是值传递,至于为什么就不深究了,记住就好了。
下面用一段代码来演示一下:
//验证引用类型是遵守引用传递的规则的代码示例
publicclass Employee {
private String name;
publicvoid setname(String name){
this.name = name;
}
publicvoid getname(){
System.out.println("员工姓名是"+name);
}
publicstaticvoid main(String[] ar){
Employee employ1 = new Employee();//实例化第一个员工对象
Employee employ2 = new Employee();//实例化第一个员工对象
employ1.setname("张三");//给第一个员工输入名字张三
employ2= employ1;//把第一个员工对象赋给第二个员工
employ1.getname();//输出第一个员工的姓名
employ2.getname();//输出第二个员工的姓名
employ2.setname("李四");//更改第二个员工的姓名为李四
employ1.getname();//输出更改后第一个员工的姓名
employ2.getname();//输出更改后第二个员工的姓名
//如果更改后输出的结果都是李四,就证明的确是引用传递
}
}
运行结果如下:
员工姓名是张三
员工姓名是张三
员工姓名是李四
员工姓名是李四
//验证基本类型是遵守值传递的规则的代码示例
publicclass Boss {
publicstaticvoid main(String[] args) {
int i = 123456;
int j;
j=i;//将i的值赋给j
System.out.println("更改前:i是"+i+" j是"+j);
i=654321;//更改i的值看j的值改变不
System.out.println("更改后:i是"+i+" j是"+j);
//如果j值没有改变,说明基本类型遵循“值传递”规则
}
}
运行结果是:
更改前:i是123456 j是123456
更改后:i是654321 j是123456
第五个问题:什么是构造器or构造函数?什么是重载?以及一些其他的东东...
构造器是这样的一个东西,它主要的作用是在实例化对象时传入参数值。书写方式是public + 类名(传入的参数){}。构造器又名曰构造函数。但它不能有任何返回值,而且必须与类名相同,在实例化对象的过程中它只被调用一次。
函数的重载,是这样一种东西,它允许你给定一个函数名(方法),这个函数同名,但是参数类型不同,数量不同抑或参数的次序不同。这样的话方便了开发人员,不用搞很多其他的函数名称在里面,容易搞晕。
函数的重载(overLoad)和函数的重写(overWrite)是有很大不同的,具体体现在:
overLoad是表现在同一个类下对同一函数名的重复书写,当然后面传入的参数是不同的;而overWrite是继承或者实现类中的一个概念,它修改了父类或者接口中的某些方法,当然后面的参数格式是必须相同的。
六、this关键字的用法?
this关键字一般是用来在类中指代当前对象的,当传入的参数名称与类中参数名称相同时加以区分。另外一种用法是放在构造器中调用其他构造器,也可以调用方法。需要注意的是,在构造器中通过this调用另一个构造器时,调用的代码必须是第一行,且只能调用一次。并且,在一般方法中不能够用this调用构造器。
一般这样用 this.name = name;
我的第一篇技术学习博客就写这么多,下一篇将会将我对继承,接口等内容的理解写下来。
2012年7月8日中午写于寝室
2012年8月3日中午修正于寝室