(超详细)Java的面向对象编程—类、对象、包、参数、构造器、重载

一、类和对象

1、对象

  • 特征 — 即属性 每个对象的每个属性都拥有特定值
  • 行为 — 即方法

2、类 — Type类型 class-类
从对象抽象出“类”,类是由若干个对象抽象形成。是对象的模型,是抽象的概念,而对象是具体的实体。类是模子,确定对象将会拥有的特征(属性)和行为(方法)。

3、类和对象关系

  • 类是对象的类型
  • 对象是类的具体存在.

4、封装 Encapsulation
对象同时拥有属性和方法两方面的信息,这一特性称为封装
对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相承,不能分割。
类与对象的关系:
类是对某一类事物的描述,是抽象的、概念上的定义;
而对象是实际存在该类事物的每个个体,因而也称实例( instance ) .
产生对象的过程,又称为实例化(instantiate)对象

二、创建类和使用对象

面向对象编程OOP(object Oriented Programming)
1.创建类
使用关键字class来定义|声明类.—>建模

  • 所有Java程序都以类class为组织单元
/**
*人 类
*/
public class Person {
	String name; //姓名.
	int age;
	//年龄
	char sex;
	//性别
	//方法的定义,声明
	public void eat() {
		System. out. println (name+"正在吃...");
	}
}

向对象的编程:
将现实世界中的对象→(从具体到抽象) →在Java程序世界中建模(创建类) →在程序世界中使用类
创建对象→ (从抽象到具体)针对于该对象进行相关的编程操作.
创建类的命名规范:
1、不能使用Java关键字
2、首字母可以为字母,也可以是_$(不建议)
3、不能包含空格或.
➢类名首字母必须大写,其后单词首字母大写 MyClass 属性: myName ,myScore
➢类名通常采用名词(见名知义)

public class Test {
	public static void main(String[] args) {
		int num; 1/分配了4字节
		num = 100;
		person p; //1.声明对象 - 分配了4字节
		p = new person(); //2.为p对象的属性分配空间
		//3.为对象的属性赋值
		p.name=张三";
		p.age=20;
		p.sex='男';
		//4.访问对象的属性或对象的方法使用圆点运算符p.属性或p.方法();
		p.eat(); //ca11调用方法
		Person p2 = new Person() ;
		p2.name="李四";
		p2.eat() ;
	}
}

三、特殊的toString()方法

在类里面定义方法后,可以将对象以字符串的形式来表达.
此方法定义在类中后,可以被隐含的调用.

//person类
public class Person {
	String name; //姓名.
	int age;
	//年龄
	char sex;
	//性别
	//方法的定义,声明
	public void eat() {
		System. out. println (name+"正在吃... ");
	}
	//tostring()用于将对象以字符串的形式来表达
	public String toString() {
		return "大家好,我叫"+name+",今年"+age+"岁,性别是"+sex;
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
	Person P; //1.声明对象 .--分配了 4字节
	P = new Person(); //2.为加对象的属性分配空间
	//3.为对象的属性赋值
	p.name="张三";
	p.age=20;
	p.sex='男' ;
	//4.访问对象的属性或对象的方法使用圆点运算符p.属性或p.方法();
	System.out.println(p. toString()) ;
	//输出p对象时,则表示将p对象以字符串的形式来表达,此时会隐式调用Person类中的toString()方法
	System. out.println(p) ;
	}
}

四、Java数据类型小结

详细请看我写的这篇文章:Java变量、标识符、数据类型及其转换
可分为两种数据类型
1.简单的值类型 8个- byte, short, int , long , float, double, char, boolean .
2.引用类型- String, int [ ] 等数组类型,使用class关键字声明的类

两种类型的区别
1)值类型的变量没有属性和方法,可以直接赋值
而引用类型的对象拥有属性和方法,不能直接赋属性的值
2)引用类型需要先通过new来分配内存(初始化)然后再为属性赋值
3)值类型变量空间分配在栈空间中,而引用类型的对象属性分配在堆空间中.栈里面的对象持有堆空间中的引用.

五、包 package

知道了对象和类,现在要了解一下Java中特有的“package”。
1.什么是包
程序中的包package —等价于操作系统中的目录(文件夹folder)
2.为什么要使用包
使用包有三点好处:
1)可以避免同名类名字冲突.
2)允许将类组织成较小的单元,易于查找 import java.util. Scanner ,Arrays
3)使用包可以保护类中的属性和方法
在企业项目开发中,规范决定,所有的类必须指定包名,没有包名的类是不存在的
3.如何使用包
1)定义包:
—直接创建包
—创建类的同时创建包
2)包的命名规范
— 包名小写.
— 采用域名倒置的方式来命名—> cam. whos. javaoqp1. project1.group1. xxx
— 自定义包名不要使用java.开头 java.util. *
3)使用其他包中的类必须要导入import
—没有包名的类default package 不能被导入.
—java. lang. *系统自动导入的. (利用Java编程语言进行程序设计的基础类)
—如果需要使用某个子包中的类,必须单独导入import
4) package —> import —> class 顺序

package com.test;
import com. entity. *;
import com. entity. oop1. Person;
import com. entity. oop1.A;
public class Test{
	public static void main (String[] args) {
		Teacher t = new Teacher() ;
		System. out.println(t) ;
		Person p = new Person() ;
		System.out.println(p) ;
		A a= new A(); //A cannot be resolved to a type A类不能被解析
		System. out.print1n(a) ;
	}
}

六、变量的作用域

作用域 scope — 起作用的范围
根据变量的作用域将变量分为以下两种:
1.局部变量Local variable
— 方法内部定义变量
— 区域块内定义的变量
— 方法的形参与实参都属于各个方法的局部变量
2.全局变量Global Variable
— 类的属性,成员变量

七、带参数方法调用

带参数的方法能增强方法的灵活性。

方法定义部份参数→形式参数
方法调用部份参数→实际参数

形参和实参都是各方法中的局部变量。
带参方法传参方式:
(1)传值调用 call by value
— 值类型变量,被调子方法中对于形参值的修改,不会影响实参的值
(2)引用调用call by reference
— 引用类型的对象
被调用的子方法中形参持有的主调用方实参对象的引用,在形参对象中修改对象的属性,实质上就是在修改实参对象的属性值。
特别的,数组作为方法参数
数组是引用类型,所有作为参数是属于”引用调用”。

package com.whos.demo04; .
class NumberTest{
	/**
	*查找最大值
	* @param arr
	*@return
	*/
	public int find_ large (int[] arr) { //形参
		int max = arr[0] ;
		for(int i=1 ; i<arr.length ; i++) {
			if (max < arr[i]) {
			max = arr[i] ;
			}
		}
		arr[0]=100;
		return max;
	}
}
pub1ic class Test {
	public static void main (String[] args) {
		NumberTest nt = new NumberTest() ;
		int[] nums = new int[]{32,45, 76,33, 11, 99,24};
		System.out.println ("调用前:"+nums[0]);
		int m = nt.find_ large (nums); //将数组名作为方法的实参
		System.out.println("最大值为: "+m);
		system.out.println ("调用后:"+nums[0]); // 值改变为100
	}
}

八、构造器

英文名: constructor
又称为构造方法,构造函数,是一种特殊的方法.

与普通方法在定义的形式上有两点区别:
1>构造方法不写返回值类型
2>构造方法的名称与类同名 [包括大小写]

与普通方法在调用上的区别: .
1)普通方法通过对象使用圆点运算符调用对象名.方法名()
2)构造方法是在创建对象时调用的方法,使用new运算符来调用的

构造器有两种类型
1>默认的无参构造器 [没有参数] -可以不写在类中,也可以直接调用
2>带参数的构造器
示例:

package com. whos. demo05;
class Person{
	String name; .
	int age;
	//Constructor
	//默认的无参构造器
	public Person() { .
		System. out. println("Person()默认构造器执行了... ");
	}
	public Person (String n,int a) {
		name = n;
		age = a;
		System. out. println ("Person (String, int)带参数构造器执行了...");
	}
	pub1ic void eat() {
		System. out. println (name+"正在eat() ...");
	}
}

pub1ic class Test {
	public static void main (String[] args) {
		Person p = new Person("小明",20) ;
		System. out. println (p .name+"\t"+p.age) ;
		p.eat() ;
	}
}

注意:
如果在一个 类中定义了带参数构造器时,此时还想使用默认的无参数构造器时,则必须将无参数构造器也定义在该类中。

九、方法的重载

Overload — 指的是在一个类中出现同名的方法,但是参数不同:
1>参数的个数
2>参数的类型
满足任一个都是可实现重载.
!!!重载与方法返回值类型无关
优点:可 以避免繁琐的方法命名.

package com. whos. demo05;
class Person {
	String name;
	int age;
	/ /Constructor
	//默认的无参构造器
	pub1ic Person() {
		System. out. println ("Person ()默认构造器执行了... ");
	}
	public Person (String n,int a) {
		name = n;
		age = a;
		System. out. println ("Person (String, int)带参数构造器执行了...");
	}
	public void eat() {
	System. out. println (name+"正在eat() ...");
	}
	public String eat (int money) {
		return "";
	}
}

pub1ic class Test {
	public static void main (String[] args) {
		Person p = new Person() ;
		System. out. println (P .name+"\t"tp.age) ;
		p.eat() ;
	}
}
发布了53 篇原创文章 · 获赞 60 · 访问量 4924

猜你喜欢

转载自blog.csdn.net/qq_37717494/article/details/104918738