面向对象的编程入门
一、面向过程和面向对象
面向过程和面向对象是两种不同的解决问题的思想
面向过程
当你拿到一个问题时,你分析这个问题第一步先做什么,第二步再做什么,这是面向过程的思维。
提出问题 == > 分解问题 ==> 解决问题
面向过程,其实就是面向着具体的每一个步骤和过程,就是面对具体的每一个功能函数。
这些功能函数相互调用,完成需求。
例如:
假如我们需要买组装电脑,这时首先会在网上查询具体每一个硬件的参数和报价。然后会去电脑城进行多家询价,接着询价结束后回家根据具体的结果分析出自己比较满意的哪家报价,接着会到这家店里进行组装,组装时还需要进行现场监督,组装完成安装相应的系统,然后电脑抱回家。
分析上述整个过程大体分一下几步:上网查询参数和报价、电脑城询价、现场安装和监督、抱电脑
回家。
在整个过程中我们参与了每一个细节,并且会感觉相当累。
面向对象
对象:一类事物的具体的某一个东西,符合这类事物具体的特征的某个东西就叫做对象。
面向对象是以对象为中心的编程思想。
面向对象是基于面向过程的,将功能封装进对象之中,让对象去实现具体的细节。只要找到了具
体的类,创建出对象,就可以调用其中的具体功能。
面向对象编程的三大特点:封装,继承,多态 。
例如:
假设你要去饭店吃饭,你只需要到饭店,找到饭店的服务员,跟她说你要吃什么,然后就会给你做出来让你吃,你并不需要知道这个饭是怎么做出来的,你只需要面向这个服务员,告诉他你要吃什么,然后他也只需要面向你吃完收到钱就好,不需要知道你怎么对这个饭进行吃。
面向对象和面向过程差异
1、面向对象是一种更符合人们思考习惯的思想
2、面向过程中更多的体现的是执行者,面向对象中更多的体现是指挥者。指挥对象做事情
3、面向对象将复杂的问题简单化
在面向对象的世界中:万物皆对象。
二、类
类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。
在Java语言中,类包括对象的属性和行为。类中对象的属性是以成员变量的形式定义的,对象的行为是以方法的形式定义的。
在Java中,使用class关键字定义类。
1、属性——类的固有特征
在Java中对象的属性也称为成员变量,成员变量的定义与普通变量的定义一样。
数据类型 变量名称 [= 值];
类的属性的默认值问题
在java中,如果定义类的使用,存在属性,但是没有给属性赋值,
java会给定默认值。
8中基本数据类型的默认值:
整型:0
浮点型:0.0
char:' '
boolean:false
对象:null
public class Test {
// 实例成员变量
public boolean bool;
public byte b;
public short s;
public char c;
public int i;
public long l;
public float f;
public double d;
public String str;
public void print() {
System.out.println("实例成员变量默认值:");
System.out.println("boolean=" + bool);
System.out.println("byte=" + b);
System.out.println("short" + s);
System.out.println("int=" + i);
System.out.println("long=" + l);
System.out.println("float=" + f);
System.out.println("double=" + d);
System.out.println("String=" + str);
System.out.println("char=" + c);
}
public static void main(String[] args) {
Test t = new Test();
t.print();
}
}
2、函数function(方法 method)——类的行为和动作
定义:
权限修饰符 [static] 返回值类型 方法名 ([参数列表]){
return 返回值;
}
3、创建对象
// 定义类,在根据类来创建对象
// 可以通过类的构造方法来创建对象,使用new关键字
类型 对象名称 = new 构造函数();
Scanner sc = new Scanner(System.in);
Random random = new Random();
4、如何操作【访问、设置】属性和方法
对象名称.xxxx
例:
public class Cat {
private String name;
private String gender;
private int age;
private String color;
public void eat(){
System.out.println("小猫吃鱼");
}
public static void main(String[] args){
Cat cat = new Cat();
cat.name = "小花";
cat.age = 3;
cat.color = "黄色";
cat.gender = "母猫";
cat.eat();
}
}
5、构造方法
访问修饰符 类名称() {
}
在java类中,如果没有自己定义构造函数,系统(JVM)会自动生成一个无参的构造,方便我们构建一个属性都为默认值的对象。
但是当我们定义了一个构造函数之后,系统(JVM)将不再自动生成一个无参的构造,如果需要这个无参,需要自己定义。
构造函数的作用:初始化属性!!!!
package com.openlab.day11;
public class TestPerson {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "张三";
p1.age = 21;
p1.gender = true;
p1.weight = 120;
p1.height = 180;
p1.id = 0001;
System.out.println(p1);
Person p2 = new Person(0002L,"李四", 23, true, 130.0, 176.0f);
System.out.println(p2);
}
}
class Person{
public long id;
public String name;
public int age;
public boolean gender;
public double weight;
public float height;
public Person() {
}
public Person(long id, String name, int age, boolean gender, double weight, float height) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.weight = weight;
this.height = height;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age
+ ", gender=" + gender + ", weight=" + weight
+ ", height=" + height + "]";
}
}
6、this指针
this 关键字 在类中使用,默认会指向当前对象,可以代表该类,后接属性与方法,代表该类的属性与方法
例如 this.name 代表该类中name属性
7、static关键字的使用
static关键字可以修饰非常多的东西(如:属性、方法、类、语法块、导包)
static可以修饰属性
static可以修饰方法
static还可以修饰类,注意,只能修饰内部类
静态导包
static静态代码块
8、类的成员:
属性
方法
构造方法
静态属性
静态方法
构造代码块
静态代码块
类的成员加载(运行)顺序:
属性最先运行,之后是构造函数。
static修饰的属性和静态代码块最先运行(这两者之间看代码顺序),
之后才开始运行对象属性和构造代码块(这两者之间看代码顺序),
最后构造函数开始运行。
/*
* 类成员加载(运行)顺序:
* 属性最先运行,之后是构造函数
* static修饰的属性和静态代码块最先运行(看顺序)
* 之后才开始运行对象和构造代码块
*
* 静态属性(方法或代码块) --> 构造代码块 --> 构造函数
*/
public class Test02 {
{
System.out.println("1");
}
public Test02() {
System.out.println("2");
}
public static int aa = 10;
public int bb = 20;
public static int cc = 30;
public int dd = 40;
{
System.out.println("3");
System.out.println(bb);
}
static {
//在程序运行过程中只运行一次
System.out.println("4");
}
public static void main(String[] args) {
Test02 t2 = new Test02();
System.out.println("------------");
Test02 t3 = new Test02();
}
}
9、java(权限)访问修饰符:
public: 任何地方都可以正常访问该修饰符修饰的属性和方法
protected: 同包、同类、子类
缺省(默认): 同包、同类
private: 只能是当前类,不允许超过该类
注意:class类,只能被public和默认这两种访问修饰符修饰