Java基础学习——类、对象和访问控制符

本章重点
(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如何使用访问控制符

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。