这节课啊,就是实际操作啦,现在咱们就要弄一个类出来啦,这节课是操作部分奥,硬货奥,很难奥
JAVA学习资料(4)————类的创建
一、类的构造
当代码中写完一个类之后,如果想用这个类,是要给这个类初始化的对叭,就是要让代码运行到这个类里面,这个初始化就叫做类的“构造”,构造函数到底是干什么用的呢,他可以给类里面的变量提前赋好值,在调用类(创建类的对象)的时候,会首先调用类的构造函数。
要注意哦,构造函数其实也可以带参数的,
每个类都有构造函数。如果没有写构造函数,Java 编译器将会为该类提供一个默认构造函数。
在创建一个对象的时候,至少要调用一个构造函数。构造函数的名称必须与类同名,一个类可以有多个构造函数。
下面是一个构造函数示例:
public class Maomao{
public Maomao() //这个就是构造函数哦,写在类的里面,这个构造函数就是没有参数的,括号里面啥也没有
{
}
}
给自己补充一点知识,你不用看,关于JAVA的析构函数:
与 Java 不同,C++ 支持局部对象(基于栈)和全局对象(基于堆)。因为这一双重支持,C++ 也提供了自动构造和析构,这导致了对构造函数和析构函数的调用,(对于堆对象)就是内存的分配和释放。
在 Java 中,所有对象都驻留在堆内存,因此局部对象就不存在。结果,Java 的设计者觉得不需要析构函数(像 C++ 中所实现的)。
Java 定义了一个特殊的方法叫做finalize() ,它提供了 C++ 析构函数的一些功能。finalize() 方法作用的一个关键元素是 Java 的垃圾回收器。 当垃圾回收器将要释放一个对象的内存时,它调用该对象的finalize() 方法(如果该对象定义了此方法)。
java有垃圾自动回收机制,一般不需要自己写!
不过垃圾回收器以独立的低优先级的方式运行,只有当其他线程挂起等待该内存释放的情况出现时,它才开始运行释放对象的内存。(事实上,你可以调用System.gc() 方法强制垃圾回收器来释放这些对象的内存。)
二、创建类的对象
类的对象就是,这个类叫小猫,那对象就是白猫、黑猫这些猫
写个例子叭:
public class Maomao{
public Maomao(int age)//这个构造函数里面有参数哦,参数是一个int类型的变量
{
System.out.println("小猫的年龄是 : " + age ); //输出一些信息
}
public static void main(String[] args)//这里是主函数哦,程序从这里开始
{
// 下面的语句将创建一个Maomao对象baimao
Maomao baimao = new Maomao( 3 );//这个3就相当于那个参数age,传入到构造函数里面了
//然后程序就跳到构造函数那里了
}
}
所以这个程序的运行结果就是:小猫的年龄是 :3
接下来呢,我们在这个类里面再加入一个函数,不过这个函数不会像构造函数一样自动运行哦,然后我们再加一个变量
public class Maomao{
int maomaoage;
public Maomao(int age)//这个构造函数里面有参数哦,参数是一个int类型的变量
{
System.out.println("小猫的年龄是 : " + age ); //输出一些信息
}
public void setAge( int age )//这个新加的函数,你在调用它的时候,会把类里面的这个变量maomaoage赋值
{
maomaoage = age;
}
public int getAge( )
{
System.out.println("小猫的年龄为 : " + maomaoage ); //这里输出的就是类里面的变量maomaoage了哦
return maomaoage;//这里的返回值还吧类里面的变量maomaoage返回回去了
}
public static void main(String[] args)//这里是主函数哦,程序从这里开始
{
// 下面的语句将创建一个Maomao对象baimao
Maomao baimao = new Maomao( 3 );//这个3就相当于那个参数age,传入到构造函数里面了
//然后程序就跳到构造函数那里了
}
}
那,运行这个程序,运行结果还是 小猫的年龄是 :3 因为刚才写的那两个函数根本就没有调用对吧,他不是自动调用的,所以运行结果还是没变,接下来我们就要用这个程序了哦,准备好了嘛
三、访问类中变量和函数
访问类中的变量:对象名.变量名;
访问类中的函数:对象名.函数名();
接下来是实例哦,修改一下主函数,看好啦
public class Maomao{
int maomaoage;
public Maomao(int age)//这个构造函数里面有参数哦,参数是一个int类型的变量
{
System.out.println("小猫的年龄是 : " + age ); //输出一些信息
}
public void setAge( int age )//这个新加的函数,你在调用它的时候,会把类里面的这个变量maomaoage赋值
{
maomaoage = age;
}
public int getAge( )
{
System.out.println("小猫的年龄为 : " + maomaoage ); //这里输出的就是类里面的变量maomaoage了哦
return maomaoage;//这里的返回值还吧类里面的变量maomaoage返回回去了
}
public static void main(String[] args)//这里是主函数哦,程序从这里开始
{
// 下面的语句将创建一个Maomao对象baimao
Maomao baimao = new Maomao( 3 );//这个3就相当于那个参数age,传入到构造函数里面了
//然后程序就跳到构造函数那里了
int a=0;//这里先定义一个a
baimao.setAge( 2 );//这个函数就把类里面的 maomaoage 变成2了
a=baimao.getAge( );//这样的话a就是2了,顺便也输出了 maomaoage 的值
System.out.println("变量值 : " + baimao.maomaoage ); //这样是直接输出maomaoage的值
System.out.println("a : " + a );//输出那个getAge的返回值,也就是maomaoage的值
}
}
这个程序运行之后呢,先会进入构造函数里面输出一行这个:
小猫的年龄是 :3
然后呢,接着回来往下执行,int a了,然后执行 baimao.setAge( 2 ),这样maomaoage就变成了2
然后接着回来往下执行a=baimao.getAge( );进入到getAge函数,输出
小猫的年龄是 :2
顺便把maomaoage的值返回给a
然后接着回来往下执行System.out.println("变量值 : " + baimao.maomaoage ); 直接输出maomaoage:
变量值 :2
然后执行System.out.println("a : " + a );输出a的值:
a :2
好了好了,太多啦太多啦,再听就太费脑子了,下节课再学吧,今天就到这里了哦,晚安。