1.类
类(class)是构造对象的模板或蓝图
由类构造(construct)对象的过程称为创建类的实例(instance)
java是面向对象设计的程序语言,对于一些规模较小的问题,将其分解为过程的开发方式比较理想。面对对象更加适合解决规模较大的问题。
OOP(object-oriented programming)面向对象程序设计调换了传统的结构化程序设计思路,调换了考虑的次序,将数据放在第一位,然后再考虑操作数据的算法。
封装(encapsulation,有时称为数据隐藏)是处理对象的一个重要概念。
对象中的数据称为实例字段(instance field) ,操作数据的过程称为方法(method)
2.更改器方法和访问器方法(更改器方法类似于c++中的给对象赋值的函数,访问器方法类似于c++的类中调用private数据)
LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);
上面的这个代码并没有将这个对象改为1000天之后的日期,而是新生成了一个新的LocalDate对象,然后把这个新对象赋给了aThousandDaysLater变量。原来的对象不做任何改动。
GregorianCalendar someDay = new GregorianCalendar(1999,11,31);
//odd feature of that class:month numbers go from 0 to 11
someDay.add(Calendar.DAY_OF_MONTH,1000);
与LocalDate.plusDays方法不同,GregorianCalendar.add方法就是一个更改器方法
调用这个方法之后,someDay对象的状态会改变。
year = someDay.get(Calendar.YEAR);//2002
mounth = someDay.get(Calendar.MONTH)+1;//09
day = sonmeDay.get(Calendar.DAY);//26
只访问对象而不修改对象的方法有时称为访问器方法。以上的方法(函数)就是只访问对象中的数据而不对数据进行更改的访问器方法。
/*
在c++中,带有const后缀的方法就是访问器方法;没有声明为const的方法默认为更改器方法。但是在java语言中,访问器方法与更改器方法在语法上没有明显的区别
*/
import java.time.*;
public class ClendarTest
{
public static void main(String[] args)
{
LocalDate date = LocalDate.now();
int month = date.getMonthValue();
int today = date.getDayOfMonth();
date - date.minusDays(today-1);//set to start of month
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue();//1 = Monday,....,7 = Sunday
System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for (int i = 1 ; i < value ; i++)
System.out.print(“ ”);
while(date.getMonthValue() == month)
{
System.out.printf("%3d",date.getDayOfMonth());
if(date.getDayOfMonth()==today)
System.out.print("*");
else
System.out.print(" ");
date = date.plusDays(1);
if(date.getDayOfWeek().getValue() == 1)
System.out.printlan();
}
if(date.getDayOfWeek().getValue() != 1) System.out.println();
}
}
这个程序展示了和如何使用一个类的接口来完成相当复杂的任务,利用LocalDate类可以编写一个日历程序,能处理星期几以及各月天数不同等复杂问题。只需要使用这个类的接口来解决问题。
用户自定义类
Employee 类
在Java中,最简单的类定义形式为:
class ClassName
{
field1
field2
。。。
constructor1
constructor2
。。。
method1
method2
。。。
}
下面看一个非常简单的Emgloyee类。在编写工资管理系统时可能会用到。
class Employee
{
// instance fields
private String name;
private double salary;
private LocalDate hireDay;
// constructor
public Employee(String n, double s, int year, int month, int day)
{
name = n;String東型
salary = S;
hireDay = LocalDate.of year, month, day);
}
// a method
public String getName()
{
return name;
)
// more methods
。。。
)
类的三大特性:
1.封装 2.继承 3.多态
封装:函数的封装是一种形式,隐藏对象的属性和实现细节(函数内部),仅仅对外提高函数的接口和对象进行交互。
类的访问限定符可以协助其完成封装
类的三个访问限定符
1.public:公有的,类的成员可以从类外直接访问
2.private/protected:类的成员不能从类外直接访问
3.类的每个访问限定符可以多次在类中使用,作用域为从该限定符开始到下一个限定符之前/类结束
4.类中如果没有定义限定符,则默认为私有的(private)
5.类的访问限定符体现了类的封装性
类的对象可以直接通过 . 来访问类的公有成员,类的对象指针可以通过->来访问类的公有成员
class person
{
public:
void Display()
{
cout << _name <<"-"<< _age << endl;
}
public:
int _age;
char* _name;
};
int main()
{
person p;
p._age = 18;
p._name = "peter";
p.Display();
person* ptr = &p;
ptr->_age = 20;
ptr->_name = "jack";
ptr->Display();
system("pause");
return 0;
}