java基础知识——对象与类

1.一个对象变量并没有实际包含一个对象,而仅仅是引用一个对象。任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用。

变量不会自动初始化为null,必须通过调用new或将它们设置为null进行初始化。


2.日期类:

Date 表示时间点,GregorianCalendar表示日历,GregorianCalendar.set是更改器方法,GregorianCalendar.get是访问器方法。


3.用户自定义类:

    1.构造器:初始化实例域;构造器总是伴随一个new操作符被调用,不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。

    2.隐式与显式参数:e.raiseSalary(5),e是employee类对象是一个隐式参数,括号中是显示参数。每个方法中,this表示隐式参数。(java中所有方法定义在类的内部,但不表示他们是内联方法)

    3.封装:应提供三项内容——一个私有的数据域;一个公有的域访问器方法;一个公有的域更改器方法;(注意:不要编写 返回引用可变对象的访问器方法?

    4.访问权限:一个方法可以访问所属类的所有对象的私有数据;可以将方法private;可以将实例域final,必须初始化,这个值不再被修改/   final修饰符大都用于基本数据类型域或不可变类(类中每个方法都不改变其对象)的域 

        静态域:属于类,不属于任何独立的对象;

       静态常量:如public static final double PI=3.14159265358979323846 

       静态方法:是不能向对象实施操作的方法,用类名调用方法 。可认为静态方法没有this参数;静态方法不能访问实例域,但可以访问自身类中的静态域

    5.factory:未深入。


4.方法参数:java采用的总是值调用。

public static void tripleSalary(Emloyee x) 

{

e.raiseSalary(200);

}    

harry = new employee(...);

tripleSalary(harry); 

实现过程:x被初始化为harry值的拷贝,这里是一个对象的引用;

                   raiseSalary方法应用于这个对象引用,x和harry同时引用的那个Employee对象的薪金提高了200%

                    方法结束后,参数变量x不再使用,对象变量harry则继续引用那个薪金增至3倍的雇员对象。

       总结一下java中方法参数的使用情况:

       一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)

       一个方法可以改变一个对象参数的状态

       一个方法不能实现让对象参数引用一个新对象。


5.对象构造:多种构造器方法

  重载:多个方法有相同的名字、不同的参数

  默认域初始化:数值为0,布尔值为false,对象引用为null,但最好对域初始化;域与局部变量的不同:即局部变量必须明确的初始化。

  默认构造器:没有参数的构造器,若未编写构造器则系统会默认提供。

  显示域初始化:确保每个实例域都被设置为有意义的初值; 还可调用方法对域初始化。

   class Employee{

..

static int assignId()

{

         int r = nextId;

        nextId ++;

        return r;

}

...

private int Id = assignId();

}

  在构造器中,参数名用与实例域同样的名字命名,将实例域屏蔽起来。this指示被构造的对象,可以采用this.salary访问实例域

public employee(String name,double salary)

{

this.name = name;

this.salary = salary;

}

还可调用另一个构造器。如下例,当调用new employee(60000)时,employee(double)构造器将调用Employee(String,double)构造器

public employee(double s){

 this("Employee#"+nextId,s);

nextId++;

}

除了以上2种初始化数据域的方法,在构造器中设置值,在声明中赋值,还有第三种方法:

初始化块。但通常直接将初始化代码放到构造器中。

总结一下调用构造器的具体步骤:

 1.所有数据域被初始化为默认值(0、false或null)

 2.按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。

 3.如果构造器第一行调用了第二个构造器,则执行第二个构造器主体

 4.执行这个构造器主体。

对静态域来说,可以采用一个静态的初始化化块来对静态域进行初始化。在类第一次加载的时候,将会进行静态域的初始化。初始化顺序按照类定义的顺序。

public class Hello

{

static 

{

System.out.println("Hello World!");

}

}

6.对象析构和finalize方法:

java有自动的垃圾回收器,无需人工回收内存,所以java不支持析构器。当一些对象使用了内存外的资源,此时可在垃圾回收器清除对象前调用finalize方法,一种更好的方法是使用shutdown hook

7.包作用域:

标记为public的部分可以被任意类使用,private的部分职能被定义他们的类使用,没有指定public或private的类、方法、变量可以被同一个包中的所有方法访问。

因此,变量最好显示的标记为private,否则就默认包可见。

8.最后总结一下,类的设计技巧:

  1 一定将数据设计为私有化

  2 一定要对数据初始化

  3 不要在类中过多的使用基本数据类型

  4 不是所有的域都需要独立的域访问器和域更改器

  5  使用标准格式进行类的定义

     建议顺序为:公有访问特性部分 、包作用域访问特性部分、私有访问特性部分,在每一部分中按照下列顺序:实例方法、静态方法、实例域、静态域

  6 将职责过多的类进行分解

  7  类名与方法名要能体现他们的职责。


 


     

本项目是一个基于SSM(Spring+SpringMVC+MyBatis)框架和Vue.js前端技术的大学生第二课堂系统,旨在为大学生提供一个便捷、高效的学习和实践平台。项目包含了完整的数据库设计、后端Java代码实现以及前端Vue.js页面展示,适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 在功能方面,系统主要实现了以下几个模块:用户管理、课程管理、活动管理、成绩管理和通知公告。用户管理模块支持学生和教师的注册、登录及权限管理;课程管理模块允许教师上传课程资料、设置课程时间,并由学生进行选课;活动管理模块提供了活动发布、报名和签到功能,鼓励学生参与课外实践活动;成绩管理模块则用于记录和查询学生的课程成绩和活动参与情况;通知公告模块则实时发布学校或班级的最新通知和公告。 技术实现上,后端采用SSM框架进行开发,Spring负责业务逻辑层,SpringMVC处理Web请求,MyBatis进行数据库操作,确保了系统的稳定性和扩展性。前端则使用Vue.js框架,结合Axios进行数据请求,实现了前后端分离,提升了用户体验和开发效率。 该项目不仅提供了完整的源代码和相关文档,还包括了详细的数据库设计文档和项目部署指南,为学习和实践提供了便利。对于基础较好的学习者,可以根据自己的需求在此基础上进行功能扩展和优化,进一步提升自己的技术水平和项目实战能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值