Java面向对象基础
记录自己每次学习的成果
文章目录
一. 摘要
1. 面向过程思想
步骤清晰简单,第一步做什么,第二步做什么…面对过程适合处理一些较为简单的问题
2. 面向对象思想
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
面向对象适合处理复杂的问题,适合处理需要多人协作的问题!
3. 面向对象思路
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
二. 什么是面向对象
1. 面向对象介绍
面向对象编程(Object-Oriented Programming, OOP)
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。
2. 核心思想
- 抽象
- 三大特征:继承,封装,多态
- 从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象
- 从代码运行角度考虑是先有类后有对象。类是对象的模板。
三. 回顾方法及加深
1. 方法的定义
-
定义语句:
修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; }
-
break 和 return 的区别
break :跳出switch,结束循环
return:结束方法,返回一个结果 -
方法名
注意规范:驼峰命名法- 第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母
- 见名知意
-
参数列表
-
参数类型:
参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
形式参数:在方法被调用时用于接收外界输入的数据。 实参:调用方法时实际传给方法的数据。
-
可变参数
在方法声明中,在指定参数类型后加一个省略号(…)
如:public void test(int...i){
-
-
异常抛出
如:public void readFile(String file) throws IOException{...}
后续讲解
2. 方法的调用
-
静态方法 static
可直接以 类名.方法名 调用
例://和类一起加载 public class Student{ public static void say(){...} }
-
非静态方法
调用前必须先实例化类
例:public class Student{ //类实例化后才存在 public void say(){...} } //实例化: Student student = new Student(); student.say();
提示:非静态方法之间可互相调用,静态方法之间可互相调用
-
形参和实参
形参只是占位符,实参是明确的值
例:public static void main(String[] args) { //形式参数和实际参数的类型要对应 Demo01 demo01 = new Demo01(); System.out.println(demo01.add(1, 2)); } public int add(int a,int b){ return a+b; }
-
值传递和引用传递
- 值传递
例:public class Demo01 { public static void main(String[] args) { int a=1; System.out.println(a); Demo01.change(a); System.out.println(a); } public static void change(int a){ a=10; } } ---------结果---------- 1 1
- 引用传递
引用传递一般为一个’对象’ 但本质上还是值传递
例:public class Demo01 { public static void main(String[] args) { person person = new person(); System.out.println(person.name); Demo01.change(person); System.out.println(person.name); } public static void change(person person){ person.name="老王"; } } class person{ String name; } -------------结果------------- null 老王
- 值传递
-
this 的使用
后续讲解
四. 类与对象的创建
1. 类的定义
类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物.
Person类、Pet类、 Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为
例:
public class Person {
String name;
int age;
}
2. 关系的定义
对象是抽象概念的具体实例
张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例。
能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念
例:
Person person = new Person();
person.name="张三";
person.age=20;
3. 创建与初始化对象
使用new关键字创建对象
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
五. 构造器详解
1. 构造方法的定义
类中的构造器也称为构造方法, 是在进行创建对象的时候必须要调用的。并且构造器有以下俩个特点:
- 必须和类的名字相同
- 必须没有返回类型,也不能写void
构造器必须要掌握
一个类即使什么也不写,他也会存在一个方法
无参构造:
public Person() {
}
有参构造:
public Person(String name){
this.name=name;
}
有参构造可以互相调用,且必须在第一行
User类
public class User {
private int id;
private String userName;
private String userPass;
public User() {
System.out.println("执行了无参构造");
}
public User(String userName, String userPass) {
this();
this.userName = userName;
this.userPass = userPass;
}
public User(int id, String userName, String userPass) {
this(userName,userPass);
this.id = id;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", userPass='" + userPass + '\'' +
'}';
}
}
测试类:Test
public class Test {
public static void main(String[] args) {
User user = new User(1,"张三","12345");
System.out.println(user.toString());
}
}
---------------结果---------------
执行了无参构造
User{id=1, userName='张三', userPass='12345'}
2. 注意:
使用new关键字,本质是在调用构造器
一旦定义了有参构造,无参就必须显示定义
构造器用来初始化值
按alt+insert键便携输入