java——面向对象篇(上)

java——面向对象篇(一)


1.面向过程和面向对象的区别

简单来说:
面向过程(Procedure Oriented):是一种以过程为中心的编程思想,强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象(Object Oriented):将功能封装进对象, 强调具备了功能 的 对象,以类对象为最小单位,考虑谁来做。

2.Java语言的基本元素:类和对象

类(Class) 对象(Object) 都是面向对象的核心概念。

  • 类:是对一类事物的描述,是抽象的、概念上的东西。
  • 对象:是实际存在的该类事物的每个个体,是类实例化的,因此也称为实例

万事万物皆为对象

比如,用人来举例:
类 = 抽象概念的人;
对象 = 实实在在的人(例:马云、马化腾…)

2.1 Java类及类的成员

  • 属性:对应类中的成员变量
  • 行为:对应类中的成员方法

不同语言有不同的命名,比如C++中称方法函数

2.1.1 成员变量

成员变量的定义与普通变量的定义一样。

数据类型 默认值
byte、short、int、long 0(整形零)
float、double 0.0(浮点零)
char ’ ’ (空格字符)
boolen false(逻辑假)
引用类型,例如String、数组 null(空值)
2.1.2成员方法
方法的定义

[权限修饰符] [返回值类型] 方法名([参数类型 参数名]){
…}
权限修饰符可以是private、public、protected

比如:在这个类中name、age、isMarried是属性,walk()是方法。

public class Person {
	String name;
	int age;
	int Ismale;
	public void eat() {
		System.out.println("我会吃饭");
		
	}
	public void Showage() {
		System.out.println("我的年龄是"+age);
	}
}
可变个数形参的方法:
  • 可变个数形参的格式:数据类型…变量名
    例:person类中的showfriends方法
    public void showfriends(String...name) { System.out.println("我的朋友有好多朋友!!!"); }
  • 当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个…
    例:person.showfriends("friend1","friend2"); person.showfriends("friend1","friend2","frident3");
  • 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
    例:
	public void showfriends(String...name) {
		System.out.println("我的朋友有好多朋友!!!");
	}
	public void showfriends(String name) {
		System.out.println("我的朋友有一个朋友!!!");
	}
  • 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存
    如果是这种情况,这里报错了
    在这里插入图片描述
  • 可变个数形参在方法的形参中,必须声明在未尾
    说明:String name 一定要在int i 之后
public void showfriends(int i,String...name ) {
		System.out.println("我的朋友有好多朋友!!!");
	}
  • 可变个数形参在方法的形参中,最多只能声明一个可变形参。

2.2.创建Java自定义类

步骤:
1.定义类(考虑修饰符、类名)
2.编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
3.编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
类的语法格式
修饰符 class 类名{
属性声明;
方法声明;

}

3.对象的创建和使用

  • 创建对象语法:类名对象名=new类名();
  • 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)

例如,对上面的人创建对象。这里我们创建了新的类来测试

public class PersonTest {
	public static void main(String[] args) {
		Person person = new Person();//创建对象
		person.name = "李四";//访问属性
		person.age = 21;
		person.eat();//访问方法
		person.Showage();
	}
}

结果如下:
在这里插入图片描述

说明:如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。

3.1 内存解析

堆(heap): 此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存 。 一点在Java 虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。(简单的说就是new出来的东西)。
栈(stack): 通常所说的 栈 Stack 是指虚拟机栈 。 虚拟机栈用于 存储 局部变量 等 。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char、short、int、float、long、double)。
比如看这个代码:

Person p1 = new Person();
p1.name = "Tom";
p1.isMale = true
Person p2 = new Person();
System.out.println(p2.name);//null
Person p3 = p1
p3.age = 10;

3.2 匿名对象

我们可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
例:new Person().showfriend()

4.面向对象程序设计的特点

面向对象程序具有以下特点:

  • 封装性
  • 继承性
  • 多态性

4.1封装

封装是面向对象编程的核心思想。将对象的属性和行为封装起来,其载体就是类,类通常会对客户隐藏其实现细节,这就是封装的思想。
例如:一台笔记本电脑,我们不需要了解笔记本内部是如何工作的,我们只需要手指敲键盘就好了,就能实现一些功能了。

4.2 继承

继承是实现重复利用的重要手段,子类通过,复用父类属性和行为的同时又添加了字类特有的属性和行为。
例如:
矩形,菱形,平行四边形和梯形都是四边形。
在这里插入图片描述

5.构造器

构造器的作用:
创建对象
初始化
1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器
这里我们没有,显示定义构造器,但系统默认提供了一个构造器,类似于
在Person类中添加了
public Person() {

}
package contain;

public class Person_1 {
 public static void main(String[] args) {
	 //创建类的对象:new + 构造器
	Person tom = new Person();
}
}
class Person {
	String name;
	int age;
	int Ismale;
	public void eat() {
		System.out.println("我会吃饭");
		
	}

	public void Showage() {
		System.out.println("我的年龄是"+age);
	}
}

2.定义构造器的格式:权限修饰符类名(形参列表){}

class Person {
	String name;
	int age;
	int Ismale;
	//定义构造器的格式:权限修饰符类名(形参列表){}
	public Person(int age,String name) {
		this.age = age;
		this.name = name;
	}
	public void eat() {
		System.out.println("我会吃饭");
		
	}

	public void Showage() {
		System.out.println("我的年龄是"+age);
	}
}

3.一个类中定义的多个构造器,彼此构成重载

	public Person(int age,String name) {
		this.age = age;
		this.name = name;
	}
	public Person(int age) {
	this.age = age;
	}

说明:一旦我们显式的定义了类的构造器之后,系统就不在提供默认的空参构造器

6. this 关键字

this关键字的使用:
1.this可以用来修饰:属性、方法、构造器
2.this修饰属性和方法:
this理解为:当前对象

7.package的使用

  • package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:
    package顶层包名.子包名
  • ·包对应于文件系统的目录,package语句中,用“.”来指明包(目录)的层次;
  • JDK中主要的包介绍
    1.java.lang----包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能
    2.java.net----包含执行与网络相关的操作的类和接口。
    3.java.io—包含能提供多种输入/输出功能的类。
    4.java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
    5.java.text----包含了一些java格式化相关的类6.java.sql----包含了java进行JDBC数据库编程的相关类/接口
    7.java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。

8.import

1.在源文件中显式的使用import结构导入指定包下的类、接口
2.声明在包的声明和类的声明之间
3.如果需要导入多个结构,则并列写出即可
4.可以使用“xxx.*”的方式,表示可以导入XXX包下的所有结构
5.如果使用的类或接口是java.lang包下定义的,则可以省略import结构
6.如果使用的类或接口是本包下定义的,则可以省略import结构7.如果在源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示。
8.使用"xxx。*“方式表明可以调用XXX包下的所有结构。但是如果使用的是XXX子包下的结构,则仍需要显示导入
9.import static:导入指定类或接口中的静态结构:属性或方法

发布了10 篇原创文章 · 获赞 8 · 访问量 1418

猜你喜欢

转载自blog.csdn.net/weixin_45640609/article/details/104270578