目录
1.类与对象
2.类与对象的区别与联系
3.对象在JVM内存中的存在形式(重要)
4.属性/成员变量/字段
5.如何创建对象
6.类和对象的内存分配机制
7.面向对象的三大特征?
8.面向对象和面向过程?
9.匿名对象
10.方法(method)
11.方法的重载(overload)
12.可变形参
13.递归
14.封装
15.四种访问权限修饰符
16.构造器
17.什么是javaBean
18.this是什么?
19.package和import
1.类与对象
抛砖引玉,一个小动物的问题引出类与对象:小明养了两只小狗狗,一只名字叫小黑,今年2岁,黑色。还有一只叫小白,4岁,白色。输入小狗名字就显示狗狗的名字,年龄,颜色。如果输入的名字错误,就显示没有这个狗狗。
- 使用现有的技术解决:
- 定义变量方式解决
- 使用数组解决
- 使用这两个技术解决问题的痛点:
- 不利于数据的管理,效率低。所以Java设计者引入了类与对象的概念,解决新的需求。
- 代码:
public class Object01{ //小明养了两只小狗狗,一只名字叫小黑,今年2岁,黑色。还有一只叫小白,4岁,白色。 //输入小狗名字就显示狗狗的名字,年龄,颜色。如果输入的名字错误,就显示没有这个狗狗。 public static void main(String[] args){ //如何使用面向对象(OOP)解决 //1.创建一只狗狗对象(实例化) new Cat(); //Dog dog1 = new Dog(); 把创建的狗狗赋给cat1 //dog1就是一个对象了 //创建第一只狗狗 Dog dog1 = new Dog(); dog1.name = "小黑"; dog1.age = 2; dog1.color = "黑色"; //创建第二只狗狗 Dog dog2 = new Dog(); dog2.name = "小白"; dog2.age = 4; dog2.color = "白色"; System.out.println("第一只狗狗的信息:"+dog1.name+","+dog1.age+"岁,"+dog1.color); System.out.println("第二只狗狗的信息:"+dog2.name+","+dog2.age+"岁,"+dog2.color); } } //定义狗狗类 class dog{ String name; int age; String color; }
2.类与对象的区别与联系
-
类是抽象的,是概念,代表一类事物,如动物,植物等...
-
对象是具体的,实际的,代表一个具体的事务。
-
类是对象的模板,对象是类其中的一个实例。
3.对象在JVM内存中的存在形式(重要)
4.属性/成员变量/字段
从概念或叫法上看:成员变量 = 属性 = field(字段)
属性是一个类的组成部分,一般是基本数据类型,也可以是引用数据类型。
注意事项:
- 属性的定义语法同变量。例如:访问修饰符 属性类型 属性名;
访问修饰符有四种:public、proctected、默认、private - 属性的定义的类型可以是基本数据类型或引用数据类型。
- 属性不赋值,有默认值。
byte 0 short 0 int 0 long 0 flout 0.0 double 0.0 boolean false String null char \u0000
5.如何创建对象
- 先声明再创建
Cat cat; //声明对象cat
cat = new Cat(); //创建 - 直接创建
Cat cat = new Cat();
如何访问属性:
基本语法:对象名.属性名 如:cat.name;
6.类和对象的内存分配机制
- Java内存的结构分析
- 栈:一般存放基本数据类型(局部变量)
- 堆:存放对象(Cat cat,数组等)
- 方法区:常量池(常量,如字符串),类加载信息。
7.面向对象的三大特征?
- 继承:继承是指一个类(称为子类或派生类)可以继承另一个类(称为父类或基类)的属性和方法。子类可以重用父类的代码,并且可以在此基础上进行扩展或修改。通过继承,子类可以获得父类的特性,形成类之间的层次结构。这样可以提高代码的可重用性和灵活性,减少重复编写代码的工作量。
- 封装:封装是将数据和对数据的操作封装到一个类中,对外部隐藏具体的实现细节,只对外暴露必要的接口。通过封装,我们可以控制对数据的访问方式,提供统一的接口来操作数据,从而提高代码的可读性、可维护性和安全性。封装还有助于实现代码的模块化和解耦。
- 多态:多态是指同一个方法可以在不同的对象上具有不同的行为。在多态的使用中,我们可以使用父类类型的引用指向子类的对象。通过多态机制,我们可以实现动态绑定和运行时的方法调用。多态提高了代码的灵活性和可扩展性,使得程序能够以更加通用和抽象的方式进行编写。
8.面向对象和面向过程?
面向过程(POP):强调的是功能行为,以函数为最小的单位,考虑怎么做。
面向对象(OOP):将功能封装进对象,强调具备了功能的对象,以类\对象为最小单位,考虑谁去做。
9.匿名对象
我们可以不定义对象的句柄,直接调用这个对象的方法。例如:new Cat().start();
注意:如果一个对象的方法只需要一次调用,那么可以使用匿名对象。
10.方法(method)
- 方法是类或者对象的"行为“ ,用来完成某个操作;方法不能独立存在,必须定义在类中。
- 方法的声明格式:
访问修饰符 返回值类型 方法名(参数类型 形参,.....){
方法体;
return 返回值;(返回值类型void,没有返回值) - }
- 举例:
public class Car{ private int age; public int getAge(){ return age; } }
注意事项:
- 方法被调用一次就会执行一次。
- 没有具体返回值的情况,返回值类型用void,方法体就不必用return。
- 不可用在方法内部定义方法。
11.方法的重载(overload)
重载就是允许存在一个以上的同名方法,只要他们参数个数或类型不同。
特点:
与返回值类型无关,参数列表不同。
例如:
int add(int a,int b){return a+b;}
int add(int a){return x;}
int add(float a,float b){return a+b;}
12.可变形参
JDK5以前采用数组形参来定义方法,传入多个同类型的变量
public static void test(int a,String[] aa);
JDK5以后采用可变个数形参来定义方法
public static void test(int a, String...aa);
注意:
- 声明格式:方法名(参数类型名...参数名)。
- 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个。
- 可变个数形参的方法与同名方法之间彼此构成重载。
- 可变参数方法的使用与方法参数部分使用数组一致。
- 同一个方法的形参上只能声明一个可变参数。
13.递归
简单来说就是一个方法体调用它自己。
递归方法包含了一种隐式的循环,它会重复执行某段代码。
递归一定要向已知的方法递归,否则递归就变成了无穷递归,类似死循环.
举例:
//计算1--100自然数的和
public int sum(int num){
if(num == 1){
return 1;
}else{
return num + sum(num -1) ;
}
}
14.封装
- 为什么需要封装?有什么用?
- 比如我要使用电脑,只需要开机进入系统就能用了,没有必要了解系统底层或硬件内结构
- 程序设计追求高内聚,低耦合。
- 高内聚是指类的内部数据操作细节自己完成,不允许外部干涉。
- 低耦合:仅对外暴露少量的方法使用。
- 隐藏方法内部,之对外公开简单的接口。便于外界调用,提高系统的可扩展性,可维护性。
15.四种访问权限修饰符
class只能使用public,默认
public 类可以在任何地方访问。
默认类只能被同一个包的类访问。
16.构造器
构造器的特征:
- 具有类相同的名称。
- 不声明返回值类型
- 不能被static,final,synchronized,abstract,native修饰,不能有return语句。
构造器作用:
创建对象,初始化对象
注意:
- Java语言中每个类都有构造器
- 默认构造器的修饰符与类的修饰符一致。
- 一旦显示定义了构造器,系统不再提供默认构造器。
- 一个类可以创建多个重载的构造器。
- 父类构造器不可被继承。
属性赋值的过程:
默认初始化--》显式初始化--》构造器初始化--》通过"对象.属性"或"对象.方法"赋值
17.什么是javaBean
- JavaBean是Java写成的可重用组件。
- 所谓JavaBean指的是符合如下标准的Java类:
- 类是公共的
- 有一个无参的公共构造器
- 有属性,且有get,set方法
- 用户可以使用JavaBean将功能,处理,值,数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部JSP页面,Servlet,其他JavaBean,applet程序或者应用来使用这些对象。用户可以认为javaBean提供了一种随时可以复制粘贴的功能,而不用关心变化。
举例:
18.this是什么?
this可以调用类的属性,方法,构造器。
它可以在方法内部使用,这个方法所属对象的引用。
在构造器内部使用,表示该构造器正在初始化的对象。
注意:
- 可以在类的构造器使用”this(形参列表)“的方式,调用本类中重载的其他构造器!
- 构造器中不能通过this(形参列表)调用自身构造器
- this(形参列表)必须声明在类的构造器首行!
- 类的构造器中,最多只能声明一个this(形参列表)
19.package和import
包(package):
- package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包
格式:package 顶层包.子包名; - 包对应于文件系统的目录,package语句中,用“.”来指明包(目录)的层次;
- 包通常用小写单词标识。
- 包的作用:
- 包可以包含类和子包,划分项目层次,便于管理
- 解决类命名冲突问题
- 控制访问权限
导入 (import):
为使用定义在不同包中的Java类,需要用import语句引入指定包层次下所需的类或全部类
语法:import 包名.类名;