Android java基础_类的封装

一.面向对象编程的引入

写一个简单的程序输出张三,李四的名字

复制代码
class Person {
	String name;
	String getName() {
		return "guangdong "+name;
	}
};


public class Oop {
	public static void main(String args[]) {
		Person p1 = new Person();
		p1.name = "zhangsan";

		Person p2 = new Person();
		p2.name = "lisi";

		System.out.println(p1.getName());
		System.out.println(p2.getName());
	}
}

运行结果:

复制代码
root@ubuntu:/home/topeet/guyilian# javac Oop.java
root@ubuntu:/home/topeet/guyilian# java Oop
guangdong zhangsan
guangdong lisi

在以上代码的基础上我们,添加构造函数,在定义对象的时候就把名字传递过去,构造函数的名字跟类名一样,在构造这个对象的时候就会自动执行这个构造方法。

复制代码
class Person {
	String name;
	String getName() {
		return "guangdong "+name;
	}

	/* construct function */	
	public Person (String n) {
		name = n;
	}
	
};


public class Oop2 {
	public static void main(String args[]) {
		Person p1 = new Person("zhangsan");
		Person p2 = new Person("lisi");

		System.out.println(p1.getName());
		System.out.println(p2.getName());
	}
}

运行结果:

复制代码
root@ubuntu:/home/topeet/guyilian# javac Oop2.java 
root@ubuntu:/home/topeet/guyilian# java Oop2
guangdong zhangsan
guangdong lisi

****在5代码的基础上,进行构造函数的重载,同时引入this,如果在一个类里面,类的属性与函数的参数名同名,我们加上this修饰表示是当前对象的属性

复制代码
class Person {
	String name;
	int age;
	String getName() {
		return "guangdong "+name;
	}

	/* construct method */	
	public Person () {
		name = "null";
		age  = 0;
	}

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

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


public class Oop3 {
	public static void main(String args[]) {
		Person p1 = new Person("zhangsan");
		Person p2 = new Person("lisi");
		Person p3 = new Person();
		Person p4 = new Person("wangwu", 6);

		System.out.println(p1.getName());
		System.out.println(p2.getName());
		System.out.println(p3.getName());
		System.out.println(p4.getName());
	}
}

运行结果:

复制代码
root@ubuntu:/home/topeet/guyilian# javac Oop3.java 
root@ubuntu:/home/topeet/guyilian# java Oop3
guangdong zhangsan
guangdong lisi
guangdong null
guangdong wangwu

在以上代码的基础上,我们添加类方法printPerson,那样我们不需要定义具体的类对象我们就可以直接用这个方法,同时我们添加一个类属性count,用来统计人数的多少。

复制代码
class Person {

	static int count;
	
	String name;
	int age;
	String getName() {
		return "guangdong "+name;
	}

	/* construct method */	
	public Person () {
		count++;
		name = "null";
		age  = 0;
	}

	public Person (String name) {
		count++;
		this.name = name;
	}

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

	static void printPerson () {
		System.out.println("This is a class of Person");
	}
	
};


public class Oop4 {
	public static void main(String args[]) {
		Person p1 = new Person("zhangsan");
		Person p2 = new Person("lisi");
		Person p3 = new Person();
		Person p4 = new Person("wangwu", 6);

		System.out.println(p1.getName());
		System.out.println(p2.getName());
		System.out.println(p3.getName());
		System.out.println(p4.getName());

		Person.printPerson();
		System.out.println(Person.count);
	}
}

运行结果:

复制代码
root@ubuntu:/home/topeet/guyilian# javac Oop4.java 
root@ubuntu:/home/topeet/guyilian# java Oop4
guangdong zhangsan
guangdong lisi
guangdong null
guangdong wangwu
This is a class of Person
4

在以上代码的基础上,我们引入构造代码块, 每实例化一个对象前,都执行;先于构造方法执行。以上例子中我们要在每个构造函数进行count ++,有了构造代码块我们只需要在构造代码块写一次就够了。同时引入静态构造代码块,实例化第一个对象前,执行;只执行一次。

复制代码
class Person {

	static int count;
	
	String name;
	int age;
	String getName() {
		return "guangdong "+name;
	}

	static {
		System.out.println("static block");		
	}

	{
		System.out.println("construct block");
		count ++;
	}

	/* construct method */	
	public Person () {
		System.out.println("construct method: Person 1");
		name = "null";
		age  = 0;
	}

	public Person (String name) {
		System.out.println("construct method: Person 2");
		this.name = name;
	}

	public Person (String name, int age) {
		System.out.println("construct method: Person 3");
		this.name = name;
		this.age  = age; 
	}

	static void printPerson () {
		System.out.println("This is a class of Person");
	}
	
};


public class Oop5 {
	public static void main(String args[]) {
		Person p1 = new Person("zhangsan");
		Person p2 = new Person("lisi");
		Person p3 = new Person();
		Person p4 = new Person("wangwu", 6);

		System.out.println(p1.getName());
		System.out.println(p2.getName());
		System.out.println(p3.getName());
		System.out.println(p4.getName());

		Person.printPerson();
		System.out.println(Person.count);
	}
}

运行结果:

复制代码
root@ubuntu:/home/topeet/guyilian# javac Oop5.java 
root@ubuntu:/home/topeet/guyilian# java Oop5
static block
construct block
construct method: Person 2
construct block
construct method: Person 2
construct block
construct method: Person 1
construct block
construct method: Person 3
guangdong zhangsan
guangdong lisi
guangdong null
guangdong wangwu
This is a class of Person
4
相关推荐
故渊at几秒前
第三板块:Android 图形渲染与窗口体系 | 第十四篇:View 绘制体系与 RenderThread 异步渲染
android·图形渲染·ui线程·renderthread·view体系
suoyue_zhan1 分钟前
SQL经典案例之数据库的CTE递归循环使用
数据库·sql
Sammyyyyy2 分钟前
2026 Mac 本地大模型部署深度解析与混合架构指南
数据库·人工智能·macos·ai·架构·servbay
折哥的程序人生 · 物流技术专研3 分钟前
《Java 100 天进阶之路》第93篇:Redis实战应用:缓存策略与分布式锁(2026版)
java·redis·缓存·面试·架构·求职招聘
瓦特what?4 分钟前
位运算核心技巧与应用
java·jvm·算法
人道领域6 分钟前
【LeetCode刷题日记】90.子集Ⅱ--- 归纳题解
java·开发语言·leetcode
zhangjw347 分钟前
MySQL数据库零基础入门,数据库原理、SQL详解、库表操作、字段约束、基础查询全覆盖
数据库·sql·mysql
IT策士8 分钟前
Redis 从入门到精通:数据结构Set 与 Sorted
数据结构·数据库·redis
2401_873479408 分钟前
如何用IP离线库检测DNS隧道和C2通信?企业DNS安全防护指南
网络·数据库·tcp/ip·安全·ip
ch.ju12 分钟前
Java Programming Chapter 4——Characteristics of inheritance
java·开发语言