目录
1.什么是面向对象(此对象非彼对象)
“面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象。
其本质就是:以类的方式组织代码,以对象的组织(封装)数据。
2.类与对象
1.什么是类
什么是类:类是一种抽象的数据类型,他是对某一类事物的整体描述/定义,但是并不代表某一具体的事物。例如:手机,电脑等等。
2.什么是对象
什么是对象:对象是抽象的具体实例。比如张三是人的一个具体实例,旺财是一个狗的具体实例。
能够体现出特点,展现出功能的具体实例,比如张三的年龄,长相就是其属性,狗的毛色,品种也是其属性,而不是一个抽象的概念。
3.类与对象的关系
1.使用new关键字创建对象,除了分配内存空间以外还会个创建好的对象进行默认初始化以及对类中的构造器进行调用。
2.通常情况下一个类能不能直接使用,需要根据一个类创建一个对象,才能使用,因此我们需要创建一个对象来调用这个类。
创建类的步骤
1)导包:
格式:import包名称.类名称;
对于同一个包的情况下,可以省略导包语句
2)创建:
格式:
类名称 对象名=new 类名称();
3)使用:
(1)成员属性:
格式: 对象名.成员变量名;、
(2)成员方法:
格式: 对象名.成员方法名(参数);
4.创建与初始化对象
1.什么是类
定义一个标准类必须有以下部分(直译:有无参数)
(1) 有一个无参构造
(2) 有一个全参构造
(3)方法
大致如下:
//一个项目只存在一个main方法
public static void main(String[] args) {
/*类:抽象的、需要实例化
类实例化后会返回一个自己的对象
students对象就是Students的一个具体实例
*/
Students students= new Students();
students.name = "张三";
students.age=20;
System.out.println(students.name+students.age);
}
//属性
String name;
int age;
//方法
void stu(){
//this代表这个类 指向型
System.out.println(this.name+"学生在学习");
}
2.构造器
构造器包括带参数构造器和无参数构造器,显而易见,指的是有无参数。
解释及实例如下:
public static void main(String[] args) {
Students students= new Students("码农");
System.out.println(students.name);
}
String name;
//一个类及时什么也不写也会存在一个方法
//定义一个构造器
//实例化初始值
/*
使用new关键字,必须使用构造器
用来初始化值
*/
//无参构造
public Students(){
//代表的是上面的name
this.name = "张三";
}
//有参构造
//一旦定义了有参构造,无参构造必须显示定义
public Students(String name){
this.name = name;
}
2.封装
定义(自己理解):该露的露,该藏的藏。将一些较为复杂的内部结构进行隐藏,将一些简单的(比如接口)该暴露给用户的东西暴露出来,比如电视机的外观等等。大部分程序的细节都应该藏起来。我们设计的程序应该追求”高内聚,低耦合“(也就是系统内部的数据操作应该由自己完成,不允许外部进行干预;仅仅暴露少量的方法给外部来进行使用)。
封装的意义:
1.提高程序的安全性,保护数据。
2.隐藏代码的关键细节(以s1.setAge(24)来说,用户根本不知道里面干了什么,只有我们程序员才知道);。
3.统一接口。
4.提高了系统的可维护性。
详细请看如下:
public static void main(String[] args) {
Students s1 = new Students();
/*
s1.name;无法进行调用,变量被private被私有了
如果换成public公有的关键字才可以被调用
*/
s1.setName("码农一号");
s1.setAge(18);
s1.setSex('男');
System.out.println(s1.getName());
System.out.println(s1.getAge());
System.out.println(s1.getSex());
}
//private关键字为私有化
private String name;//名字
private int age;//年龄
private char sex;//性别
/*
想要解决主程序中的s1.name被调用的问题就需要提供一些可以操作这个属性的方法
解决办法就是提供一些public的get、set方法
*/
//获得这个数据
public String getName(){
return this.name;
}
//给这个数据设置值
public void setName(String name){
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age<100&&age>0) { //离谱的三岁稚童
this.age = age;
}else {
this.age=3;
}
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
提示:alt+inset可以快速构造(java自带的)