第三章:类与对象

第一节:类的结构

怪物:
	名称,血量,体型,皮肤,攻击方式1, 防御方式1

class 怪物{
	String 名称;
	int 血量;
	String 体型;
	String 皮肤;

	攻击方式1(){
		
	}
	防御方式1(){
	
	}
}
身材好, 小短裙, 会钢管舞

类:一类事物的抽象
对象:抽象的具象化

怪物 BaiGuJin = new 怪物(); //通过抽象的描述,得到一个具体的对象
BaiGuJin.name = "白骨精"



[类定义修饰符] class  <类名> {   //类体
  [成员变量声明] 
  [常量声名]
  [构造方法]{  
  	//{位于类名或方法名的同一行末尾
  }

  [方法]{
  
  }
}

所有命名规则必须遵循以下规则:
1)、名称只能由字母、数字、下划线、$符号组成
2)、不能以数字开头
3)、名称不能使用JAVA中的关键字。
4)、坚决不允许出现中文及拼音命名。
1)、类命名的规范
类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage。由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zvhkrmI4-1670987510076)(raw/bcd.png)]

2)、普通方法
方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头 。例如: sendMessge。
方法表示一种行为,它代表一种动作,最好是一个动词后者动词词组或者一个单词为一个动词。
1、普通方法的作用
2、普通方法的重载
	方法名词相同,但参数的类型,个数,顺序不一致。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fT4LVueN-1670987510077)(raw/bce.png)]

3)、构造方法
1、方法名与类名相同。
2、构造方法的作用:
	用于对象的创建
3、构造方法的重载
	参数类型、个数、顺序不一致。
4)、变量的命名
Java变量命名规则为:
1、Java变量命名只能使用字母、数字、下划线、美元符号($)组成。
2、变量名以字母、下划线或者美元符号开头,其中以美元符号开头命名的变量虽然能够编译通过但是不建议使用。
3、变量的名字可大小写混用,但首字符应小写。
4、Java变量名不限制长度,在命名的时候,尽量使用完整的单词进行命名,不要使用缩写。
5、变量名不可以和java关键字冲突,但是可以包含关键字。  
5)、常量的命名
全大写或大写+下划线(_),Java常量使用final修饰
eg: final String DATA_DBS_NAME = "my_point";

第二节:类与对象

1)、类与对象的关系
类与对象是整个面向对象中最基础的组成单元。
类:	是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。

可以一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的。
2)、this关键字
this:指当前类对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1KWnlXaw-1670987510077)(raw/1a.png)]

3)、==与equals()
1、equals:判断两个变量或者实例指向同一个内存空间的值是不是相同
2、==:判断两个变量或者实例是不是指向同一个内存空间

判定输出结果:
        Integer aaa=new Integer(5);
        Integer bbb=new Integer(5);
        
        int a=10;
        int b=10;
        String str1=new String("justice");
        String str2=new String("justice");
        String str3;
        str3=str1;
        
        
        System.out.println(aaa==bbb);
        System.out.println(aaa.equals(bbb));
        System.out.println(a==b);
        
        System.out.println(str1==str2);
        System.out.println(str1.equals(str2));
        
        
        System.out.println(str1==str3);
        System.out.println(str1.equals(str3));
4)、对象实例化的格式
1、类名称 对象名称 = new 类名称 () ;
2、类名称 对象名称 = null ;
   对象名称 = new 类名称 () ;

当一个实例化对象产生之后,可以按照如下的方式进行类的操作:
对象.属性:表示调用类之中的属性;
对象.方法():表示调用类之中的方法。
5)、内部类
内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类。内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类
a、成员内部类
eg:成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式
    class Circle {
        double radius = 0;

        public Circle(double radius) {
            this.radius = radius;
        }

        class Draw {     //内部类
            public void drawSahpe() {
                System.out.println("圆形内部类");
            }
        }
    }
注意:
1、成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
2、当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问
    外部类.this.成员变量
    外部类.this.成员方法
3、成员内部类创建对象(实例化)
	new 外部类名().new 内部类名()
4、在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问
b、局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。

注意:
1、局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
2、局部内部类只能在方法里面是实例化。
c、匿名内部类
匿名内部类也就是没有名字的内部类
1、正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写
2、但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
d、静态内部类
静态内部类与普通内部类的区别在于,静态内部类的对象是不指向与某个具体的外部类对象,所以在创建对象时不需要创建外部类对象
静态内部类创建对象:
	new 外部类名.内部类名();

第三节:访问权限修饰符

1)、类的权限修饰符
public :将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。
friendly :默认的修饰符,只有在相同包中的对象才能使用这样的类。
2)、成员变量权限修饰符
public(公共访问修饰符)
private(私有访问修饰符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。
protected(保护访问修饰符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。
friendly ,在同一个包中的类可以访问,其他包中的类不能访问。
3)、方法权限修饰符
public(公共修饰符)
private(私有修饰符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)
protected(保护访问修饰符)指定该方法可以被它的类和子类进行访问。
friendly ,在同一个包中的类可以访问,其他包中的类不能访问。
4)、权限修饰符的权限表
访问修饰符同一个类同包不同包,子类不同包,子类
private
friendly(默认)
protected
public

精简总结:

public 开放所有,

private 不能跨类访问,

friendly 不能跨包访问,

protected 跨包需要继承才能访问。

第五节:关键字

1)、权限修饰符
	private	一种访问控制方式:私用模式
	protected	一种访问控制方式:保护模式
	public	一种访问控制方式:共用模式
2)、类方法变量修饰符
    abstract	表明类或者成员方法具有抽象属性
    class	类
    extends	表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
    final	用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变
    implements	表明一个类实现了给定的接口
    interface	接口
    native	用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
    new	用来创建新实例对象
    static	表明具有静态属性
    strictfp	用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
    synchronized	表明一段代码需要同步执行
    transient	声明不用序列化的成员域
    volatile	表明两个或者多个变量必须同步地发生变化
3)、程序控制
    break	提前跳出一个块
    continue	回到一个块的开始处
    return	从成员方法中返回数据
    do	用在do-while循环结构中
    while	用在循环结构中 
    if	条件语句的引导词
    else	用在条件语句中,表明当条件不成立时的分支
    for	一种循环结构的引导词
    instanceof	用来测试一个对象是否是指定类型的实例对象
    switch	分支语句结构的引导词
    case	用在switch语句之中,表示其中的一个分支
    default	默认,例如,用在switch语句中,表明一个默认的分支
4)、错误处理
    try	尝试一个可能抛出异常的程序块
    catch	用在异常处理中,用来捕捉异常
    throw	抛出一个异常
    throws	声明在当前定义的成员方法中所有需要抛出的异常
5)、包相关
    import	表明要访问指定的类或包
    package	包
6)、基本数据类型及包装类
    boolean - Boolean:	基本数据类型之一,布尔类型
    byte - Byte:		基本数据类型之一,字节类型
    char - Character:	基本数据类型之一,字符类型
    double - Double:	基本数据类型之一,双精度浮点数类型
    float - Float:		基本数据类型之一,单精度浮点数类型
    int - Integer:		基本数据类型之一,整数类型
    long - Long:		基本数据类型之一,长整数类型
    short - Short:		基本数据类型之一,短整数类型
7)、变量引用
    super	表明当前对象的父类型的引用或者父类型的构造方法
    this	指向当前实例对象的引用
    void	声明当前成员方法没有返回值
8)、保留字
    goto	保留关键字,没有具体含义
    const	保留关键字,没有具体含义

第六节:函数参数

1)、基本数据类型做函数参数
当将基本类型或基本类型的包装集作为参数传递时,传递的是值。也就是说函数内对参数所做的修改不会影响原来的变量。
2)、对象做函数参数
将对象(对象的引用)作为参数传递时传递的是引用(相当于指针)。也就是说函数内对参数所做的修改会影响原来的对象。
3)、数组做函数参数
数组(数组引用))作为参数传递时传递的是引用(相当于指针)。也就是说函数内对参数所做的修改会影响原来的数组。
4)、String类型做函数参数
String类型(引用)作为参数传递时传递的是引用,只是对String做出任何修改时有一个新的String对象会产生,原来的String对象的值不会做任何修改

课后作业

题目1(训练)
定义手机类,手机有品牌(brand),价格(price)和颜色(color)三个属性,有打电话call()和sendMessage()两个功能。

请定义出手机类,类中要有空参、有参构造方法,set/get方法。 

定义测试类,在主方法中使用空参构造创建对象,使用set方法赋值。

调用对象的两个功能,打印效果如下:
正在使用价格为3998元黑色的小米手机打电话....
正在使用价格为3998元黑色的小米手机发短信....

操作步骤
1. 定义手机类,手机类中定义String类型的品牌,int类型的价格,String类型的颜色,三个成员变量都用privice修饰。
2. 提供空参构造方法和有参构造方法。
3. 提供set/get方法。
4. 编写打电话的成员方法,方法中对成员变量进行使用。
5. 编写发短信的成员方法,方法中对成员变量进行使用。
6. 在测试类中创建手机对象,使用set方法赋值,分别调用各个方法。
题目2(训练)

定义一个女朋友类。女朋友的属性包含:姓名,身高,体重。行为包含:洗衣服wash(),做饭cook()。另外定义一个用于展示三个属性值的show()方法。请在测试类中通过有参构造方法创建对象并赋值,然后分别调用展示方法、洗衣服方法和做饭方法。打印效果如下:

我女朋友叫凤姐,身高155.0厘米,体重130.0斤
女朋友帮我洗衣服
女朋友给我做饭


训练提示
1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
2. 成员变量要被private修饰。
3. 展示方法的作用就是打印姓名、身高、体重三个成员变量的值。

操作步骤
1. 定义女朋友类,定义String类型姓名,double类型身高和double类型体重三个成员变量,三个成员变量都用privice修饰。
2. 提供空参构造方法和有参构造方法。
3. 提供set/get方法。
4. 编写展示方法show(),方法打印三个成员变量的值。
5. 编写洗衣服wash()方法,输出洗衣服的语句。
6. 编写做饭cook()方法,输出做饭的语句。
7. 在测试类中使用有参构造创建女友对象,分别调用各个方法。
题目3(训练)

定义项目经理类Manager。属性:姓名name,工号id,工资salary,奖金bonus。行为:工作work()
定义程序员类Coder。属性:姓名name,工号id,工资salary。行为:工作work()

要求:

​ 1.按照以上要求定义Manager类和Coder类,属性要私有,生成空参、有参构造,set和get方法
​ 2.定义测试类,在main方法中创建该类的对象并给属性赋值(set方法或有参构造方法)
​ 3.调用成员方法,打印格式如下:

工号为123基本工资为15000奖金为6000的项目经理正在努力的做着管理工作,分配任务,检查员工提交上来的代码.....
工号为135基本工资为10000的程序员正在努力的写着代码......


训练提示
1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
2. 成员变量要被private修饰。
3. 在工作work()方法中调用成员变量,输出成员变量的值。


操作步骤
1. 定义项目经理类,定义成员变量,构造方法,set和get方法,work方法,方法中根据打印格式输出id,salary,bonus的值。
2. 定义程序猿类,定义成员变量,构造方法,set和get方法,work方法,方法中根据打印格式输出id和salary的值。
3. 在测试类中使用有参构造创建项目经理对象并赋值,调用工作方法打印结果。
4. 在测试类中使用有参构造创建程序员对象并赋值,调用工作方法打印结果。
题目4(训练)

定义猫类Cat。属性:毛的颜色color,品种breed。行为:吃饭eat(),抓老鼠catchMouse()
定义狗类Dog。属性:毛的颜色color,品种breed。行为:吃饭(),看家lookHome()
要求:
​ 1.按照以上要求定义Cat类和Dog类,属性要私有,生成空参、有参构造,set和get方法
​ 2.定义测试类,在main方法中创建该类的对象并给属性赋值(set方法或有参构造方法)
​ 3.调用成员方法,打印格式如下:

花色的波斯猫正在吃鱼.....
花色的波斯猫正在逮老鼠....
黑色的藏獒正在啃骨头.....
黑色的藏獒正在看家.....

训练提示
1. 类中的属性就是成员变量,类中的行为功能就是成员方法。
2. 成员变量要被private修饰。

操作步骤
1. 定义猫类,定义成员变量,构造方法,set和get方法,吃饭方法eat(),抓老鼠方法catchMouse(),方法中根据题目给出的格式输出成员变量的值。
2. 定义狗类,定义成员变量,构造方法,set和get方法,吃饭方法eat(),看家方法lookHome(),方法中根据题目给出的格式输出成员变量的值。
3. 在测试类中使用有参构造创建猫类对象,调用eat()方法和catchMouse()方法。
4. 在测试类中使用有参构造创建狗类对象,调用eat()方法和lookHome()方法。
题目5(选择题)
1、下面对方法的作用描述不正确的是:(      ) 

A、 使程序结构清晰        B、 功能复用      C、 代码简洁     D、 重复代码 

2、方法内定义的变量:(    ) 

A 、一定在方法内所有位置可见      B、 可能在方法内的局部位置可见 

C、 在方法外可以使用              D、 在方法外可见 

3、方法的形参:( ) 

A、可以没有       B、至少有一个     C、必须定义多个形参      D、只能是简单变量

5、return 语句:( ) 

A、不能用来返回对象             B、只可以返回数值 

C、方法都必须含有                D、一个方法中可以有多个 return 语句 

6、void 的含义:(  )

A、方法体为空                    B、方法体没有意义 

C、定义方法时必须使用            D、方法没有返回值 

7、main()方法的返回类型是:(     ) 

A 、boolean        B、 int       C、 void       D、 static 

8、方法重载所涉及的方法:(        )

A、有相同的名字      B、参数个数必须不同    C、参数类型必须不同    D、返回类型必须不同

9、下面关于类和对象之间关系的描述,正确的是(     )

A、联接关系    B、包含关系    C、具体与抽象的关系   D、类是对象的具体化

10、下面关于java中类的说法哪个是不正确的(      )

A、类体中只能有变量定义和成员方法的定义,不能有其他语句。

B、构造方法是类中的特殊方法。

C、类一定要声明为public的,才可以执行。

D、一个java文件中可以有多个class定义。

11、下列哪个类声明是正确的(   ) 

 A、 public void  H1{…}         B 、public class Move(){…}

 C、 public class void  number{}      D、 public  class Car{…}

12、下面的方法声明中,哪个是正确的()

A、 public class methodName(){}       B、 public void int methodName(){}

C、  public void methodName(){}       D、public void methodName{}

13、下述哪些说法是不正确的?(     ) 

A、 实例变量是类的成员变量          B、 实例变量是用static关键字声明的

C、 方法变量在方法执行时创建        D、方法变量在使用之前必须初始化

14、下面对构造方法的描述不正确是(    )。

A、 系统提供默认的构造方法  	B、 构造方法可以有参数,所以也可以有返回值

C、 构造方法可以重载			D、 构造方法可以设置参数

15、定义类头时,不可能用到的关键字是( )。 
A、class		B、static	C、final		D、void

void H1{…} B 、public class Move(){…}

C、 public class void number{} D、 public class Car{…}

12、下面的方法声明中,哪个是正确的()

A、 public class methodName(){} B、 public void int methodName(){}

C、 public void methodName(){} D、public void methodName{}

13、下述哪些说法是不正确的?( )

A、 实例变量是类的成员变量 B、 实例变量是用static关键字声明的

C、 方法变量在方法执行时创建 D、方法变量在使用之前必须初始化

14、下面对构造方法的描述不正确是( )。

A、 系统提供默认的构造方法 B、 构造方法可以有参数,所以也可以有返回值

C、 构造方法可以重载 D、 构造方法可以设置参数

15、定义类头时,不可能用到的关键字是( )。
A、class B、static C、final D、void


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值