JAVA基础学习——Day9(类和对象上半部分)

一、数组练习题收尾

1. 例题1

 (1)思路:

A. 奇数个元素时候

B. 偶数个元素时候 

C. 结论:综上所述,循环的条件是left < right 

(2)代码实现

 2. 例题2

(1)思路:

A. 普通情况

 B. 极端情况

 

(2)个人代码

 

(3)示例代码 

 3. 二维数组:相当于一个表格,分为行和列。

(1)语法:

数据类型[][] 数组名称 = new 数据类型[行数][列数]{可选择的初始化数据}

(2)实例:

A. 二维数组的初始化

B. 二维数组的遍历:双层循环,外层遍历行,内层遍历列

注意:列数的来源:arr[i].length,也就是每一行的长度是列数

二、类和对象(上)

1. 面向对象的认知

2.  类的定义和使用

(1)语法:

class 类名称{

        属性;//成员属性,对象属性

        方法;//成员方法,对象方法

}

例如:

class Person{

        //成员变量,这些属性的值和具体的对象有关

        String name;       //姓名

        int age;        //年龄

        int sex;        //性别

        public void eat() {} //吃饭行为 ——成员方法,行为和具体对象有关

        public void eat() {} //睡觉行为 —— 成员方法

}

(2)注意:一个源文件只能存在一个主类(主类必须和源文件名称相同),主类用public class定义。class声明的普通类可以存在多个

(3)注意2:


(4)类的实例化——>通过类产生对象,就称之为类的实例化

A. 在java中使用class关键字定义的类,就相当于在计算机中产生了一个新的类型(类似于String类)

class Dog(){}

B. 通过A.中产生的新类型产生具体对象,称之为类的实例化。使用new关键字产生对象

Dog dog = new dog(); //Dog是声明类型,dog是对象名,new dog()是产生对象并把逻辑地址赋值给dog这个引用

语法格式:

类名称 引用名称(对象名称) = new 类名称();

(5)产生了实例化对象后,通过该对象 "."操作符就可以访问成员属性和成员方法,下面是示例

(6)注意3 :类中的成员变量和成员方法都是和具体对象强相关的(不同的对象有着不同的属性值,由于属性值的不同,相应的一些方法表现出来的行为也就不同)。即:成员属性和成员方法必须通过具体的对象来调用

 3. 构造方法

(1)构造方法的特点

A. 构造方法名字和类名称相同,无法自定义方法名称

B. 构造方法没有返回值类型声明(void也别写)

C.构造方法在创建对象时,有编译器自动调用,且在对象产生时调用一次 

D. 若在定义类的时候没有明确定义构造方法,编译器会编译时生成默认的无参构造;若在定义类的时候明确定义了构造方法,则默认的无参构造不再生成,例如下图

 

(2)构造方法由来:初始化对象调用构造方法,构造方法就是为了产生对象,给成员属性做初始化操作

(3)注意:一个坑

 (4)定义构造方法的实例

A. 例子1:在下图中自定义了一个无参构造,则默认的构造不再生成

 B. 例子1:在下图中只自定义了一个有参构造,则默认的构造不再生成,在这种情况下创建对象的时候调用无参构造就会编译出错

 (5)Dog dog = new Dog();//这一行代码背后JVM具体干的事情

A. 先检测Dog这个类是否加载到JVM中。也就是检测Dog这个类是否已经被加载到JVM内存中(注:JVM运行起来可能会加载上万个类,也有很多类不是立即加载的。程序中可能会定义非常多的类,这些类并不是程序一启动就加载进来的,而是用谁就加载谁),没有就加载到JVM中,否则就执行下一步

B. 执行关键字new,看到new就在堆空间上开辟空间用于存储对象。(注:到底开辟多大的空间,看这个类中成员属性的类型以及个数)

注意:

C. 调用构造方法为每个成员属性赋初始值(构造方法就是在产生对象的时候给成员属性赋初始值)

注:类中的成员变量都有默认值,默认值就是其数据类型的默认值(无参构造自动赋值的,编译器自动执行,但是在java源文件和class文件中不会写)

 注意:定义类的时候可以给成员变量就地初始化,实际上也是就地初始化是通过无参构造自动赋值的,只不过这里赋值的值不再是初始值而是就地初始化的值。如下图的例子

ss

字节码文件

注:这里并不是先令name = null, color = null再令name = 66, color = 灰色。而是直接使得name = 66,color = 灰色

 注意1:一个测试证明就地初始化是通过无参构造赋值的

 注意2:也就是上述就地初始化就等同于下面的代码

 

 (6)构造方法的重载

注意:构造方法的重载,只是参数的个数不同,类型和类中定义的成员变量的类型保持对应。原因:构造方法只是在生成对象的时候给类中定义好的成员变量赋值,而参数的类型是在类中已经定义好的了

A. 原理

注:在具体创建对象的时候根据传入的参数个数来找到对应的构造方法,如果没有找到对应的构造方法,则编译错误

B. 代码实例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值