java基础之面向对象的介绍

时间:2023-02-15 14:42:44

1.面向对象的概念

举例:大象装进冰箱。

  • 面向过程
    打开冰箱门
    放进去
    关上冰箱门。
    面向过程思想强调的是过程(动作)
    c语言就是面向过程
  • 面向对象
    强调的是对象(实体)。
    冰箱打开
    冰箱存储
    冰箱关闭
    常见:C++ Java C#
    java基础之面向对象的介绍
  • 面向对象特点
    1.面向对象就是一种常见的思想,符合人们的思考习惯。
    2.复杂问题简单化。
    3.让曾经在过程中的执行者,变成了对象中的指挥者。

2.类与对象的关系

java基础之面向对象的介绍
只要明确该事物的属性和行为并定义在类中即可
对象:其实就是该类事物实实在在存在的个体。
类与对象之间的关系?
类:事物的描述
对象:该类事物的实例,在java中通过new来创建。

  • 类与对象的体现
public class CarDemo {
public static void main(String[] args) {
//在计算机中创建一个Car的实例,通过new关键字
Car c = new Car();//c是一个类类型的引用变量,指向了该类的对象
c.num = 4; //要使用类中的属性和方法,可以使用对象名.成员的形式完成调用
c.color="red";
c.run();
}
}

class Car {

int num;//轮胎数量
String color;//汽车颜色

public void run() {
System.out.println(num +"..."+ color);
}

}

定义类其实就是在定义类中的成员。
成员:成员变量(属性)、成员函数(行为)

对象在内存中的体现:
java基础之面向对象的介绍

  • 成员变量和局部变量的区别:
    1.成员变量定义在类中,整个类中都可以访问。
    局部变量定义在函数,语句,局部代码块中,只在所属的区域有效。
    2.成员变量存在于堆内存的对象中。
    局部变量存在于栈内存的方法中。
    3.成员变量随着对象的创建而存在,随着对象的消失而消失。
    局部变量随着所属区域的执行而存在,随着所属区域的结束而释放
    4.成员变量有默认的初始值,局部变量没有默认初始值。
  • 匿名对象
    匿名对象是对象的简化形式
    匿名对象的两种使用情况
    当对对象的方法仅进行一次调用的时候
    匿名对象可以作为实际参数进行传递

3.封装

  • 概念
    指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
  • 好处:
    提高重用性
    提高安全性
    将变化隔离
    便于使用
  • 封装原则:
    将不需要对外提供的内容都隐藏起来。
    把属性都隐藏,提供公共方法对其访问。
  • private关键字:
    是一个权限修饰符。
    用于修饰成员(成员变量和成员函数)
    被私有化的成员只能在本类中访问。
  • 常用:
    将成员变量私有化,对外提供对应的set,get方法对其进行访问,提高对数据访问的安全性。

4.构造函数

构建创造对象的时候调用的函数。
- 特点:
1.函数名和类名相同
2.不用定义返回值类型
3.不可以写return语句
- 作用:
给对象进行初始化。
- 注意:
1.默认构造函数的特点
2.多个构造函数是以重载的形式存在的。
一个类中如果没有定义过构造函数啊,那么该类中就会有一个默认的空参构造函数。如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。
- 一般函数和构造函数什么区别呢?
构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。
一般函数:对象创建后,需要函数功能时才调用。
构造函数:对象创建时,会调用并且只调用一次。
一般函数:对象创建后,可以被调用多次。
- 什么时候定义构造函数呢?
在描述事物时,该事物一存在就具备的一些内容,这些内容都定义在构造函数中。
构造函数可以有多个,用于对不同的对象进行针对性的初始化.
多个构造函数在类中是以重载的形式来体现的。
- 细节:
1,构造函数如果完成了set功能。set方法是否需要。
2,一般函数不能直接调用构造函数。
3,构造函数如果前面加了void就变成了一般函数。
4,构造函数中是有return语句的。

5.this关键字

  • 特点:
    this代表所在函数所属对象的引用。
    换言之,this代表本类对象的引用。
    什么时候使用this关键字呢?
    当在函数内需要用到调用该函数的对象时,就用this。

例如:

public class Demo8 {

public static void main(String[] args) {

Person p = new Person();
p.setAge(22);
p.speak();
}

}
/**
* 人的属性:age 行为:speak
* @author Administrator
*
*/

class Person {
//私有属性
private int age;
//无参构造
public Person(){}
//有参构造
public Person (int age) {
this.age = age;
}
//对外提供setter和getter方法
public void setAge(int age) {
if(age > 0 && age < 130) {

this.age = age;
}else {
System.out.println("年龄输入错误");
}
}

public int getAge() {
return age;
}

public void speak() {
System.out.println("age = " + age);
}
}

6.static关键字

  • 静态代码块。
格式:
static
{
静态代码块中的执行语句。
}

特点:随着类的加载而执行,只执行一次,并优先于主函数。
用于给类进行初始化的。


classPerson {
String name;//成员变量,实例变量
static String country = "CN";//静态变量。类变量
publicvoidshow()
{
System.out.println(Person.country+":"+this.name);
}
}

static的特点:
1,static是一个修饰符,用于修饰成员。
2,static修饰的成员被所有的对象所共享。
3,static优先于对象存在,因为static的成员随着类的加载就已经存在了。
4,static修饰的成员多了一种调用方式,就可以直接被类名所调用。类名.静态成员。
5,static修饰的数据是共享数据,对象中的存储的是特有数据。
- 成员变量和静态变量的区别?
1,两个变量的生命周期不同。
成员变量随着对象的创建而存在,随着对象的被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2,调用方式不同。
成员变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
3,别名不同。
成员变量也称为实例变量。
静态变量称为类变量。
4,数据存储位置不同。
成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据.
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据.
- 静态使用的注意事项:
1,静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)
2,静态方法中不可以使用this或者super关键字。
3,主函数是静态的。

  • 静态的使用:
    静态什么时候用?
    1,静态变量。
    当分析对象中所具备的成员变量的值都是相同的。
    这时这个成员就可以被静态修饰。
    只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
    如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的。
    2,静态函数。
    函数是否用静态修饰,就参考一点,就是该函数功能是否有访问到对象中的特有数据。
    简单点说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。
    如果不需要,就可以将该功能定义成静态的。当然,也可以定义成非静态,
    但是非静态需要被对象调用,而仅创建对象调用非静态的
    没有访问特有数据的方法,该对象的创建是没有意义。