本章重点
(1)认识类
(2)认识对象
(3)如何调用基础类
(4)如何设计类
1.类
面向对象程序设计的本质就是类的设计,在分析问题域后,抽象出适当的类,完成类的属性、行为和类间的通信接口设计,从而完成一个软件系统。
类是Java的一种数据类型。(也就说 “类” 是属于对象类型的数据)
1.1类的定义
Java使用class关键字命名类,在关键字class后面书写类名,例如:
class ClassName { }
这样就定义了一个类类型,此时类主体内什么也没有。因此,不能完成任何任务。但符合Java规范定义的类,可以生成该类的对象,并且不受对象数目的限制。
ClassName newClass = new ClassName ();
1.2Java中的基础类
背景:Java中已经存在了很多前辈开发出来的类,可以被开发人员直接使用,将这些有共同特征的类组合在一起形成类库(API)。
- 数学运算处理类Math
- 时间和日期的类Date
- 日历的类Gregorian Calendar
2.对象
类和对象,有点像是从属关系。
对象的特点:对象的唯一性,体现在对象具有静态属性和动态行为。
2.1对象的3个特征
1)对象行为:这个对象能做什么,即可以让这个对象完成什么样的功能,比如自行车可以用来骑。
2)对象的状态:当操纵对象的方法时,对象所保持的一种特定的状态,比如可以扭转车使得自行车转弯,捏紧刹车会使车停下来。
3)对象的标识符:通过标识符,区别具有相同行为或类似状态的对象,例如不同颜色的自行车。
以下有个小案例:
01 class自行车 //定义一个自行车类
02 {
03 int color; //对象的标识符
04 int material; //对象的标识符
05 int type; //对象的标识符
06 int a; //对象的状态属性
07 void ride(){ } //对象的行为
08 void control(int a) //对象的状态方法函数
09 {
10 if a=number1
11 转弯
12 else if a=number2
13 直行
14 else a=number3
15 停止
16 }
17 }
2.2对象句柄
是一个指向对象所在内存的指针。
2.3初始化对象
通过“String str”来完成对象句柄的命名,用“=”将对象句柄与对象实例关联。
String str = new String(“Hello”);
代码解析:
1 str:给对象句柄命名为str。
2 第一个String:声明这个对象句柄指向什么类型(String类型)的对象。
3 =:将“Hello”这个字符串实例对象的内存地址赋给对象句柄。
4 new:这种方法创建的字符串,不管内存有没有为“hello”字符串分配内存,都会在内存中重新分配一个内存区域存放“hello”,然后用str指向它,相当于内存中有两个“hello”只是存放的地址不一样。
tips:
1 一般情况下,是将对象句柄当成是新对象的替代物,可以通过对该对象句柄来操作这个新对象。
2 真正被操作的是对象,而不是对象句柄。
2.4对象的成员方法
方法:编程语言中的函数,用来实现对象的某种功能,或表现出对象的某种状态。
成员:指它是属于对象的,就好比某个俱乐部成员是属于这个俱乐部的一样。
成员方法:属于这个对象的,能让对象做出什么或表现出什么状态的函数。
【案例1】
01 public class object3 //定义一个Object3类
02 {
03 public void print() //定义一个print方法
04 {
05 for(int i=0;i<=5;i++) //嵌套for循环
06 {
07 for(int j=5-i;j>=0;j--)
08 {
09 System.out.print("*"); //输出*
10 }
11 System.out.println(); //换行输出
12 }
13 }
14 public static void main(String[] args) //主方法
15 {
16 Object3 pro=new Object3(); //创建对象pro
17 pro.print(); //调用方法print()
18 }
19 }
【案例2】
01 public class Object4 //定义一个Object4类
02 {
03 public static void main(String[] args) //主方法
04 {
05 for(int i=0;i<=5;i++)
//嵌套for循环
06 {
07 for(int j=5-i;j>=0;j--)
08 {
09 System.out.print("*"); //输出*
10 }
11 System.out.println(); //换行输出
12 }
13 }
14 }
案例1和案例2 的输出结果是相同的。案例1是面向对象程序设计,案例2是面向过程程序设计。
- 面向对象程序设计:将这个程序中的每个部件(包括成员方法),作为一个模块,等要使用它的时候,再随时调用它们。
- 面向过程程序设计:将这个程序的需求按照顺序的步骤来编写。
返回值与无返回值
返回值:一个方法结果所获得的值,将这个值返回到主程序中,并且将这个值作为主程序中运行的参数的值。
01 public class Object6 //定义一个Object6类
02 {
03 int print(int x) //定义一个print方法
04 {
05 return 2*x; //返回值
06 }
07 public static void main(String[] args) //主方法
08 {
09 Object6 pro=new Object6(); //创建对象pro
10 System.out.println(pro.print(3)); //调用方法print()
11 }
12 }
第三行创建了int print(int x)方法,这个方法返回了2x的值,输出为6。int print(int x)的x为形参(形式参数),2x的x为实参(实际参数)。
01 public class Object7 //定义一个Object6类
02 {
03 void print() //定义一个print方法
04 {
05 System.out.println("我是一名程序员"); //输出
06 }
07 public static void main(String[] args) //主方法
08 {
09 Object7 pro=new Object7(); //创建对象pro
10 pro.print(); //调用方法print()
11 }
12 }
无返回值:如果一个方法没有返回值,那么就可以将方法结构中的返回值类型写成“void”,就代表此方法无返回值。
2.5对象的成员变量
成员变量:是对象所拥有的并且标识对象的属性值,例如自行车的颜色材料都是属性值,也可以说是成员变量。
3.访问控制符
3.1什么是访问控制符
访问控制符:能够控制访问权限的关键字。
种类:
(1)出现在类之前的访问控制符:public、default。
(2)出现在成员变量与成员方法之前的访问控制符:private、public、default和protected。
3.1.1出现在成员变量与成员方法之前的访问控制符
private控制符
当用在成员变量和成员方法之前的访问控制符为private时,说明这个变量只能在类的内部被访问,类的外部是不能访问的。
!!!private访问控制符的用法和意义不是很了解
public控制符
public控制符是指所有类都可以访问。
【案例】
01 public class Object11 //定义一个Object11类
02 {
03 public static void main(String[] args) //主方法
04 {
05 Pri3 p=new Pri3(); //创建对象p
06 p.print(2); //调用方法print()
07 System.out.println(2*(p.x)); //定义公有成员方法
08 }
09 }
01 class Pri3 //创建一个Pri1类
02 {
03 public int x=1; //创建公有成员变量
04 public void print(int y)
05 {
06 System.out.println(2*y); //输出内容
07 }
08 }
运行结果:
4
2
- 如果在成员数据的前面加上default控制符,那就意味着只有同一个包中的类才能访问。
- 如果在成员数据的前面加上protected控制符,那就意味着不仅同一个包中的类可以访问,并且位于其他包中的子类也可以访问。
3.1.2出现在类之前发访问控制符
- 当在一个类的前面加上public控制符,同前面一样,也是在所有类中可以访问。
-
当在一个类的前面加上default控制符,同前面一样,也是在同一包中的类可以访问。这个访问控制符是Java程序中默认的控制符。当在类前不加任何控制符时,默认就是default。
总结
引用来源:https://www.cnblogs.com/wt9866/p/13596038.html
3.2如何使用访问控制符
略