Java是一门面向对象的语言,其重要的一个思想就是“万物皆对象”。类是java的核心内容,它是一种逻辑结构,定义了对象的结构,可以由一个类得到众多相似的对象。
类实际上是定义一个模板,而对象是由这个模板产生的一个实例。
类的一般形式:
class 类名{
类型 实例变量名;
类型 实例变量名;
。。。。。。
类型 方法名(参数){
方法内容
}
。。。。。。
}
注意:在JAVA中是允许把许多类的声明 放在一个JAVA文件中的,但是这些类只能有一个类被声明为public,而且这个类名必须和Java文件名相同。
private:只有本类可见。
protected:本类、子类、同一包的类可见。
默认(无修饰符):本类、同一包的类可见。
public:对任何类可见。
类的实例变量和方法:
有返回值的方法:
带参数的方法:
类型 方法名(参数类型 参数1,参数类型 参数2...){
方法体
}
测试Human类:
测试结果:
方法的重载:Java中支持两个或者多个同名的方法,但是它们的参数个数和类型必须有区别。当调用这些同名的方法时,java会根据参数的个数和类型来确定到底调用的是哪一个方法。
对象的创建和使用:
创建对象:
(1)
Human wangming; 声明一个Human类的变量wangming;
wangming=new Human(); 通过new运算获得一个对象实例并为其分配内存,获得对象实例赋值给wangming。
(2)
Human wangming=new Human(); 这个方法和上面两句的效果一样
(3)调用方法是通过“.”运算符实现的 ,如:wangming.eat();
对象之间也可以进行赋值运算
构造函数:Human zhangsan=new Human();实际上是调用了一个方法,不过这个方法是系统自带的方法,由于这个方法被用来构造对象,所以把它称为构造函数。它的作用是生成对象,并对对象的实例变量进行初始化。系统自带的默认构造函数把所有的数字变量设为0,把所有的boolean型变量设为false,把所有的String变量都设为null。构造函数有一个很明显的特点是它的名字必须跟类名相同,并且没有返回在值类型。
通过编写带有参数的构造函数可以把值传递给对象的变量:
构造函数的重载:(这个与java不再提供默认的构造函数不矛盾吗?)
回答上面的疑问:(不注释的时候下面那句不会报错)
构造函数中调用其它的构造函数:
Static关键字:
静态变量:普通的各种变量都是属于某个对象的,静态变量跟对象是没有关系的,跟它相关联的是类而不是对象。(static变量对每个类都只有一份存储空间,非static变量对类的每个对象有一个存储空间)
以下是个失败的例子,最后一个s2.staticint理论应该等于1;
规范的静态变量的访问方法:1、类名.变量名(首选)
规范的静态变量的访问方法:2、也可以通过对象去引用静态变量,如:对象名.静态变量
静态方法的访问:1、类名.方法名(首选) 2、对象来引用某个静态方法 对象名.静态方法
静态方法的重要用法是:不创建任何对象的前提下就可以调用它,如main方法
静态方法不能直接访问非静态变量。
非静态方法可以直接访问静态变量。
mian函数也是一个静态方法
静态常量:
定义:public static final int X=123;该变量X在程序中是不可以改变的,不能通过赋值改变它的值。
静态变量、静态常量的初始化是调用 构造函数之前完成的。
参数传递:
参数传递分为传值和传地址,传值:把参数的值直接传递给方法,而传地址是给方法提供参数的地址。Java的参数传递方法都为传值调用,但涉及到对象的传递时,比较复杂.
基本类型的参数传递:
this关键字的用途:
在构造函数中调用其他的构造函数。
在方法中获得调用该方法的对象。
对象类型的参数传递:
交换前后结果一样。
包:
导入一个包后就可以使用该包中的类了。
类的成员变量:在类中声明的变量;类的局部变量:在类的方法中声明的变量
细节问题注释已经写的比较清楚了,这里不在赘述,只是总结一下,其实this主要要三种用法:
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数,注意在函数参数(局部变量)和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。
3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!
看下图中颜色不一样:第一张图表示的是成员变量;第二张表示的是局部变量