目录
面向对象概念
1、面向对象:将问题看成由若干个对象组成,这些对象相互独立又可以相互配合、连接和协调。从而共同完成整个程序需要的任务和功能。
面向对象的三大特征:封装、继承和多态
2、对象是用来描述客观事物的一个实体。。。。。。通俗的讲,对象是在类之下的个体,比如:在狗类中具象化一个拥有狗类基本属性,有有可能有自身独特属性的狗个体。
再换句话来说:狗类中定义了狗有四条腿,那么一个"实例化"的名字叫"小白"的狗,默认是有四条腿的,这是狗类的共性,但是“小白”可以只有三条腿,这是对象的特点。
3、类,是指具有相同属性和方法的一组对象的集合。定义了对象将会拥有的特征(属性)和行为(方法)。上面的例子中狗的名字与狗的腿数就是属性。
定义类
定义类的过程就是设计类的过程
定义类的格式如下
1、定义类的名称
[访问修饰符] class 类名{
//访问修饰符包括 public 公开的 空的
//访问修饰符会使类的访问权限受到限制。具体在后续会提到。
//关键字为class
}
2、定义类的属性
[访问修饰符] 数据类型 属性名;
//访问修饰符 public private protected 受保护的 private 私有的
//在类中可以直接给属性赋值也可以通过下列方法赋值。
//在规范写法中一般采用set()与get()方法来对类中的属性进行写入读取等操作
3、方法的定义
[访问修饰符]返回类型 方法名称(参数类型 参数名1,参数类型 参数名2.......){
//具体方法内容
return ...
//如果 返回类型为void 那么return就不必使用return
//如果不是void修饰的返回类型,则一定要使用return来返回一个相同数据类型的值
//小括号内的内容称之为参数
}
如:
public class Dog{
public String name;
public String color;
public void run(){
sout(name+"去跑步!");
}
public void run(String name){
sout(name+"去跑步!");
}
public Dog(String name,String color){
this.name = name;
this.color = color;
}
}
创建和使用对象
创建对象,称之为实例化一个类的对象,相当于生成了类别下的一个具体的个体。
定义方法:
类名 对象名= new 类名();
如
Dog d1 = new Dog();
Dog d2 = new Dog("小白","白");
//在此处Dog是类名,d1是实例化的对象名,new是关键字
//Dog()括号内有时会进行传值,具体要参考有参的构造方法一节
//类名()称之为类的构造方法
对象的使用:
对象名.属性 //引用对象的属性
对象名.方法名() //引用对象的方法
如:
d1.name = "小白";
d1.run()
结果为
小白去跑步!
面向对象的优点如下:
与人的思维一致,使“类”来模拟现实世界中的抽象概念,使用“对象”来模拟现实世界中的实体,有利于问题的解决、
信息隐藏:因为有访问修饰符,可以提高程序的可维护性和安全性。封装实现了模块化和信息隐藏,将类的行为与属性封装在类中,保证了对他的修改不会影响到其他类和对象。
而访问修饰符使得类的属性与行为在类外部的对象不能随意访问,提高了代码的安全性。
提高了程序的可重用性:一个类可以创造多个实例化的对象。并同时访问类中的属性与方法。
对象数组:
对象数组的本质就是:数组的类型为具体的方法名,对象数组存储的元素就是这个类的实例化对象,每个数组元素就是一个对象,当根据下标找到某个元素时,可以按照对象的使用方法来使用该元素。使用方法如下.
Dog [] dog = {new Dog("小白","白"),new Dog("小黑","黑"),new Dog("小黄","黄")};
for(int i = 0;i<Dog.length;i++){
dog[i].run();
}
成员方法
创建方法时定义的参数叫做形式参数,简称形参
经由方法的调用传过来的参数叫做实际参数,简称实参
在代码块中
public void run(){
sout(name+"去跑步!");
}
public void run(String name){
sout(name+"去跑步!");
}
可以看到有两个同名的run()方法。这样是不会报错的,因为run()内传入的参数不同
这种称之为方法的 重载
重载的特点:
在同一个类中
方法名相同
参数的个数或者类型不同,也可以两个都不同
方法的返回值不能作为判断方法是否之间构成重载的依据。
在使用时,具体使用哪种方法取决于括号内传入的值的类型与个数。
方法重载的优点:
方法重载其实是对原有方法的一种升级,可以根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,简化了类的调用方法的代码.
成员变量
作用域:
直接定义在类中的变量叫做成员变量,他定义在方法的外部。可以理解为类的属性,因此这种成员变量的作用域为当前类都可使用。
定义在方法内部的变量叫做局部变量,作用域仅为方法内部使用。
成员变量与局部变量的区别:
作用域不同:局部变量的作用域在定义它的方法内部,而在该方法之外无法访问到此变量。成员方法的作用域是在整个类的内部,所有的成员方法都可以访问它,如果访问权限允许,还可以在类的外部访问到类的成员变量。
初始值不同:对于成员变量,如果在定义时没有赋值,系统会自动为他赋予一个初始的空值,但是局部变量就必须在声明赋值之后再使用。
二者的存放位置不同,一个存放在栈中一个存放在堆中,局部变量在方法调用完成后就会被释放掉,而成员变量一直有分配的内存空间。
在同一个方法中,不允许有同名的局部变量,但在不同的方法中可以有同名的局部变量 (for循环)
局部变量可以与成员变量同名,在使用时局部变量有更高的优先级(就近原则),如果想优先使用成员变量,需要使用this关键字修饰。(this.变量名)
java中的变量类型分为两种,基本数据类型和引用数据类型。
java中的引用数据类型又分为三类:类,数组,接口。
构造方法
构造方法的定义如下:
[访问修饰符] 构造方法名([参数列表]){
//构造方法名必须与类名完全相同
//访问修饰符与参数列表可以省略
//参数列表为空意思是默认的构造方法 是系统自动生成的,如果已经定义了一个或多个构造方法,Java不会自动添加默认的构造方法。
//参数列表进行参数传值意味着重载了原有的空构造方法,进行了新的构造方法的调用
//构造方法没有返回值
//构造方法是在创建对象时就自动运行的方法
}
封装
封装的概念
在Java中封装就是将类的状态信息隐藏在类的内部,不允许外部程序直接访问,而是通过对该类提供的方法来实现对隐藏信息的操作和访问。封装反映了事物的相对独立性,避免了外部错误对此对象的影响,并能够对对象使用者由于意外产生的错误进行到一定的预防和规避作用。同样的,面向对象编程提倡对象之间实现松耦合关系,好处在于隐藏类的实现细节,让使用者只能通过特定的方法来访问数据,可以更加方便的加入存取控制符,来限制不合理的操作。
松耦合是指,减少对象之间的关联性,以降低他们之间的复杂性和依赖性。
封装的步骤
1.修改属性的可见性/修改访问修饰符
public class Dog{
private String name;
private String color;
//将public修饰的公开的属性改为使用private修饰的私有属性
}
2.为这些私有变量设置setter()与getter()方法
在IDEA中 使用组合键ALT+ins选择 "Getter and Setter" 选择需要创建方法的属性,就可以快速完成创建
3.设置属性的存取限制
此时还没有对这些属性值的设置进行合法性检查,需要在setter()方法中进一步根据情况来判断语句进行赋值限制
使用包改进信息输出
包的概述
Java中的包机制也是一种封装,包主要有以下三个方面的应用
1.包允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件。
2.防止命名冲突,Java中只有在不同包中的类才能重名。
3.包允许在更广的范围内保护类、数据和方法。根据访问规则,包外的代码有可能不能访问该类。
包的定义
关键字package
包的声明是Java源文件中的第一条非注释性语句,而且一个源文件只能有一个包声明语句,设计的包需要与文件系统结构相对应。
规范为:一个唯一的包名前缀是全部小写的ASCII字母,并且是一个顶级域名(edu、com、gov、net、org)一般是公司域名倒着写
package 项目名(公司域名倒着写).项目名
包的使用
声明包的含义是声明当前类所在的包
package cn.xxx.pack1;
导入包的含义是声明在当前类中使用到的其他类所在的包
package cn.xxx.pack2;
import cn.xxx.pack1.类名
访问修饰符
类和类成员的访问控制
| 修饰符\作用域 | 在同一包中 | 非同一包中 |
|---|---|---|
| public | 可以使用 | 可以使用 |
| 默认修饰符 | 可以使用 | 不可以使用 |
类成员的访问修饰符
| 修饰符\作用域 | 同一类中 | 同一包中 | 子类中 | 其他地方 |
|---|---|---|---|---|
| private | 可以使用 | 不可以使用 | 不可以使用 | 不可以使用 |
| 默认修饰符 | 可以使用 | 可以使用 | 不可以使用 | 不可以使用 |
| protected | 可以使用 | 可以使用 | 可以使用 | 不可以使用 |
| public | 可以使用 | 可以使用 | 可以使用 | 可以使用 |
static关键字
一个类可以创建无数个对象,如果这些对象之间有数据需要共用,就需要使用static关键字进行修饰这些数据。
在Java中一般情况下调用类的成员都需要先创建类的对象,然后通过对象进行调用。使用static关键字可以实现通过类名.直接调用类的成员,不需要创建类的对象。
使用static关键字修饰的属性属于类,不属于具体的某个对象。
用static关键字修饰属性
用static修饰的属性称之为静态变量或者类变量,没有使用static修饰的属性称之为实例变量
public class Dog{
public String name;
public static String color;
}
Dog d1 = new Dog();
d1.name = "小白";
Dog.coler = "白";
在实际开发中使用static关键字修饰属性最常用的场景就是定义使用final关键字修饰的常量,使用final关键字修饰的常量在整个程序运行时都不能改变,和具体对象没有关系,因此使用static关键字修饰 如 static final double PI = 3.14;(声明常量时一定要赋初始值)。
用static关键字修饰方法
使用static关键字修饰的方法称为静态方法或者类方法,不用static修饰的方法称之为实例方法。
和静态变量一样静态方法也是采用 类名.方法名的方法使用
在静态方法中不能直接访问实例变量和实例方法
在实例方法中可以直接调用类中定义的静态变量和静态方法
本文深入探讨了面向对象编程的核心概念,包括类的定义、对象的创建与使用、方法的重载及其优点。讲解了成员变量与局部变量的区别,以及构造方法在对象初始化中的作用。此外,还详细阐述了封装的概念和步骤,强调了其在信息隐藏和代码安全方面的重要性。最后,介绍了访问修饰符和静态关键字在控制访问权限和共享数据中的角色。
6528

被折叠的 条评论
为什么被折叠?



