Java面向对象基础
面向过程和面向对象编程思想
-
面向过程思想
- 面向过程即按步骤编程,第一步做什么、第二步做什么…
- 面向过程适合处理一些较为简单的问题
-
面向对象思想
- 面向对象以分类的思维模式,思考问题首先会考虑解决问题需要将问题分为哪些类,然后再对类进行单独思考,最后对类下面的细节进行面向过程处理
- 面向对象适合处理复杂的问题,适合处理需要多人进行协作的问题
-
对于处理复杂的项目,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统;但是在具体到微观操作时,则还是需要以面向过程的思路去处理
什么是面向对象
-
面向对象编程:Object-Oriented Programming-----OOP
-
面向对象编程的本质是:以类的方式组织代码,以对象的方式封装数据
-
三大特性:
- 封装
- 继承
- 多态
-
一般认识的角度考虑的先为对象,然后再分类。对象:具体的事物;类:是抽象的,是对对象的抽象
-
从代码运行的角度是先有类,然后又对象。类是对象的模板
Java方法回顾
方法的定义
package oop.demo01;
public class Demo001 {
public static void main(String[] args) {
//方法是static修饰,直接调用
System.out.println(max(1,2));
}
/*
修饰符 返回值类型 方法名(参数类型 参数名){
//方法体
return 返回值;//void修饰时不需要返回值或返回值为空
}
*/
//方法是static修饰,为静态方法,可以直接调用
public static int max(int a,int b){
return a>b?a:b;//三元运算符
}
}
方法的调用
- 静态方法和非静态方法
package oop.demo01;
public class Demo002 {
public static void main(String[] args) {
//使用关键字new实例化Demo002这个类
//对象类型 对象名=对象值
Demo002 demo001 = new Demo002();
System.out.println(demo001.SayHello());
Demo002 demo002 = new Demo002();
demo002.p();
}
//非静态方法
public String SayHello() {
return "Hello everyone";
}
//非静态方法
public void p() {
System.out.println("Hello everyone");
return;//可选,不返回值
}
}
//注:静态方法是和类一起加载的,所以可以在类里面直接调用;非静态方法在类实例化后才存在,所以需要实例化才可以调用
- 值传递和引用传递
package oop.demo01;
//值传递
public class Demo003 {
public static void main(String[] args) {
int a=1;
System.out.println(a);//输出结果为1
Demo003.change(a);//调用方法change
System.out.println(a);//输出结果还为1
}
public static void change(int a){
a=10;
}
}
package oop.demo01;
//引用传递
public class Demo004 {
public static void main(String[] args) {
//引用传递:对象
Person person = new Person();
System.out.println(person.name);//输出结果为null
Demo004 demo004 = new Demo004();
demo004.change(person);//调用方法change()
System.out.println(person.name);//输出结果为Java
}
public void change(Person person){
//person是一个对象,指向的是:Person person = new Person();这是一个具体的人,可以改变属性
person.name="Java";
}
}
//定义一个类Person,里面有一个属性name
class Person{
String name;
}
- This关键字:This指的是类本身
对象的创建和分析
类和对象的关系
-
类是一种抽象的数据类型,是对某一类事物整体描述或者定义,但是并不能代表某一个具体的事物
- 例如:动物、手机、电脑…
- Person类、Pet类等,这些类都是用来描述或者定义某一类具体的事物应该具备的特点和行为
-
对象是抽象概念的具体实例
- 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念
- 例如:小明、小米pro8…
创建与初始化对象
-
使用new关键字创建对象
-
使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化:
int //默认0或者0.0 char //u0000 boolean //默认false 引用 //默认null
-
使用new关键字创建对象的时候,还会对类中构造器调用
-
类中的构造器也称为构造方法,是在进行创建对象的时候必须调用的,构造器有以下特点:
- 名字和类的名字相同
- 没有返回类型,也没有void修饰符
package oop.demo01;
//定义一个Demo005类
public class Demo005 {
//定义属性name和age
String name;//默认为null
int age;//默认为0
//在类中调用一个方法learn()
public void learn(){
System.out.println("学习方法");
}
}
package oop.demo01;
//将以上方法在main方法中运行
public class Application {
public static void main(String[] args) {
//类是抽象的,需要实例化一个对象
//用实例化后的对象调用类中的属性和方法
//xm为实例化后的一个对象,也就是Demo005类的一个具体实例
Demo005 xm= new Demo005();
//调用类中的属性
xm.name="小明";
xm.age=20;
System.out.println(xm.name+"\t"+xm.age);
//调用类中的方法
xm.learn();
Demo005 xh = new Demo005();
xh.name="小华";
xh.age=20;
System.out.println(xh.name+"\t"+xh.age);
xh.learn();
}
}
- 构造器(构造方法)
package oop.demo01;
public class Demo006 {
String name;
//一个类即使什么都不写,也会存在以个方法(构造方法)
//使用new关键字,本质上是在调用构造器
//构造器也可以用来初始化值
public Demo006(){
}
//有参构造,一单定义了有参构造,无参就必须显示定义
public Demo006(String name){
this.name=name;
}
}
- 使用Alt+insert快捷键可以快捷输入一个构造器