2020/3/11学习笔记-day16

java-day16

目录

java-day16

早上

和数组相关的一些东西

数组对象和普通对象的区别

类和对象

OOP(面向对象编程 Object-Oriented programming)

下午

封装 Encapsulation

继承 Inheritance

多态 Polymorphism

抽象的数据类型

类和对象的关系

对象和引用的关系

方法的定义和调用


早上

和数组相关的一些东西

我们可以使用数组类型,去声明出一个引用类型的变量,简称引用,这个引用可以指向一个对象,这个对象是一个数组对象。

数组对象和普通对象的区别

1、普通对象是使用类来创建出的对象,数组对象是使用数组类型来创建出的对象。

例如:

Student stu = new Student();
​
int [] arr = new int[4];

2、类类型是通过我们编写java文件,再编译成class文件,再加载到JVM内存中,然后就可以使用这个类类型了。而数组类型是利用当前已经存在的类型,然后加上中括号,结合而成的一种数组类型。

Student.java文件-->Student.class文件 -->Student类型

JVM内存中已经有了Student类型,结合成一个数组类型:

Student + [ ] -->Student[ ]

3、普通对象的来历

先编写 Student.java文件

再编译成 Student.class文件

再加载到内存 Student 类型

再创建对象 new Student( )对象

普通的对象里面有很多属性和方法,这些属性和方法都是提前在java文件中编写好的,这样子就可以使用普通对象调用到我们想使用的属性和方法,这些属性和方法是我们刻意提前在java文件中定义好的。

4、数组对象的来历

JVM内存中已经存在的某个类型 Student 类型

然后使用这个类型+[ ]组合在一起 Student[ ]类型

然后创建对象 new Student[1]对象

这个数组对象只是用来存放Student类型对象的,这个数组对象就是一个简单的容器,可以存放其他数据。

所以数组对象我们不能自定义数组对象中的属性和方法,只能调用到默认存在的属性和方法。

5、数组对象中的属性和方法

属性只有一个:length

返回数组的长度

在java中,所有对象都是Object类型的,那么所有对象都可以调用到从Object中继承过来的方法,所以数组对象能调用到的方法都是从Object中继承过来的。

java中的数组和Arrays这个类有什么关系?

数组对象中只有一个属性,和几个Object中的固定方法,同时我们有不能在数组对象中自定义属性和方法,JAVASE API 中提供了一个专门操作数组对象的辅助工具类 java.util.Arrays;

java中的对象都是属于某一个具体类型的

例如:

Student s = new Student();

那么当前创建出的这个对象就是属于Student类型的

java中的数组对象是属于哪个类型的?

java数组对象是属于数组类型的,但是不同的数组对象属于不同的数组类型,因为数组类型有很多。

int [ ] a = new int[4];
//a:对象
//a这个对象属于 int [ ] 类型
​
String [ ] a = new String[4];
//String:对象
//String这个对象属于 String [ ] 类型

数组对象和类的关系?

没有关系,数组对象只和对应的数组类型有关系,但是这个数组类型是有可能用一个类类型+中括号组合而成的

类和对象

OOP(面向对象编程 Object-Oriented programming)

抽象

使用面向对象编程语言的程序员必要的能力。

java中的类是怎么来的?

客户-(提出)->需求->分析->事物->抽象->类->实例化->对象->访问->属性/方法-(调用)->执行代码->完成功能->满足客户->....

java语 言本身具有的特点

封装 Encapsulation 继承 Inheritance 多态 Polymorphism

下午

封装 Encapsulation

对代码中属性、方法的封装

写一个类和方法的过程实际上也是封装,将属性和方法进行封装,形成一个整体。

继承 Inheritance

继承是java中类和类之间的一种关系,类和类之间的关系有很多种,继承只是其中的一种关系。一个子类可以基础一个父类,子类可以把父类中的属性和方法都基础过来。这样以来,在子类中就可以直接拥有从父类中继承过来的东西。

Object类是所有类的父类,它是java的根类。

继承也是支持代码重用的表现形式。

多态 Polymorphism

在代码运行期间,一个父类型的变量,可以指向它的任何一个子类对象,当我们使用这个变量去调用方法的时候,JVM在执行的时候会根据这个变量所指向的对象的不同,分别去执行当前所指向对象中的方法,最终的结果可能会是不同的。

相同类型的不同对象,调用相同方法的时候,会有不同的表现形式。 例如:

public class Person{
    public void run(){
        //....
    }
}
​
public class Person{
    public void run(){
        //....
    }
}
public class Student extends Person{
    public void run(){
        //student run
    }
}
public class Teacher extends Person{
    public void run(){
        //teacher的run
    }
}
Person p;
p = new Student();
p.run();//输出student run
​
p = new Teacher();
p.run();//输出teacher run

注意,p.run()这句代码最终的结果怎样,是和变量p在调用run方法的时候,这个变量p所指向的对象是谁有关系。

注意,将来我们就可以利用多态这个特点,在代码执行的时候,让父类型变量,灵活的改变所指向的对象,那么这样以来,就可以做到在代码不做任何改动的情况下,就可以运行到不同的代码。

抽象的数据类型

数据类型本身就是抽象的,它就是用来对特定数据进行描述或者定义的。表达的意思就是,只要满足这种情况或者条件的数据,就属于这一种数据类型。

例如 int这种数据类型,它定义了一种数据类型的特点,在内存中占32位的空间,同时表示为一个普通的整型数据。那么只要是满足这个条件的数据,就属于int类型的数据。所以int本身是不能使用的,我们只是用int来描述/定义符合特定条件的这么一类数据应该具备什么特点。

那么Student类,它的含义其实和int是类似的。Student类就是用来描述/定义学生这种数据应该具备的特点(属性/方法)。 Student类是不能直接用的,我们可以使用Student声明出这个类型的变量,或者创建出这个类型的对象,这个对象才是我们真正表示学生的数据,可以使用对象访问里面的属性和方法。

java中的所有类型都是可以用来声明这个类型的变量以及创建这个类型的数据,使用这个变量接收这个数据,最后拿着这个变量就可以对数据进行操作。

类和对象的关系

事物->抽象->类

类本身不是数据,而是对同一数据进行描述的,定义出这种数据应该具有什么样的特点。

对象其实就是我们在代码中要使用和操作的数据。只不过对象是一种复杂的数据,我们平时使用的1 1.5 false 'a' 这种数据是比较简单的数据(基本类型的数据)

类是对一种数据的描述,对象就是这种数据具体的体现,我们需要使用类来创建出这种数据,也就是对象。

类是模板,可以使用类来创建出对应的数据,这个数据就是对象,这个对象的特点和类是一致的。类中声明了什么属性和方法,那么这个对象中就有什么属性和方法。所以最终用来操作的是这个对象而不是这个类。特别是方法,方法一旦被调用方法中的代码就会一行行的运行了。

java代码第一个被调用的方法是谁?

main方法,也就是程序入口。这个方法是JVM帮我们调用的,相当于给了我们一个启动程序的机会。

对象和引用的关系

引用:使用引用类型声明的变量

引用可以指向对象,如果一个引用没有指向任何对象,那么他的值为null

对象在创建出来之后,不能直接用么,为什么还要是有引用去指向这个对象?

public class Student{
    public void sayHello(){
        
    }
}
//使用引用
Student s = new Student();
s.sayHello();
s.sayHello();
​
//不使用引用
(new Student()).sayHello();

使用引用可以通过该引用多次调用该方法,而不用引用只能调用一次。

生活中的例子(三者的关系)

电视机就是一个对象,厂商手里的图纸,就是类,厂商按照图纸可以生产出电视机,就相当于我们使用类创建出了对象,我们在家里可以使用遥控器去控制电视机,那么这个遥控器就相当于代码中的引用,这个引用指向对象,可以调用对象中的方法,遥控器指向电视机可以控制它的行为,例如调大音量或者换台等。

类的声明

public class Student

类的声明和实现

public class Student()

方法的声明(只有声明没有实现-抽象方法)

public adbtract void test();

方法的声明并实现

public void test(){ }

方法的定义和调用

修饰符 返回类型 方法名(参数列表) 抛出异常的类型{
    //code
}

修饰符:

public :公共方法,类外可以调用
static :静态方法,可以直接用类调用这个方法
abstract :有声明没有实现
final
native:来自于其他语言

用来修饰方法、属性和类

一个方法上可以同时拥有多个不同的修饰符

方法上也可以不写修饰符(同包访问)

返回类型:

方法执行完如果有要返回数据,在方法上一定要声明返回数据的类型是什么,如果没有要返回的数据,那么方法上要使用void进行声明。只有一种特殊的方法没有返回类型也不写返回类型(构造方法,或称构造器)

//编译报错
public void test1(){
    return 1;
}

break与return区分

break:只能用在循环里面或者switch语句中,表示要结束当前
循环或者当前的switch代码块。
​
return:结束当前方法,return后面还可以跟一个数据表示结束方法吧数据返回。没有返回类型也可以使用return用来结束方法。

  

方法名:

满足java中的标识符命名规则就可以

参数列表:

根据具体情况可以定义为无参、1个参数、多个参数、可变参数。

抛出的异常类型:

在一个方法的参数列表后面,可以使用throws关键字,表明该方法在执行的过程中, 【可能】会抛出什么类型的异常,这里我们可以声明多种类型的异常,因为在方法执行期间,可能会抛出的异常类型不止一种。

public void test()throws RuntimeException{
    //当满足...会抛出RuntimeException异常
    if(){
       throw new RuntimeException("异常信息"); 
    }
}
//匿名代码块,只能在创造对象的时候自动执行
{
    
}
发布了82 篇原创文章 · 获赞 52 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/iostream992/article/details/104801341