第2课第1节_Java面向对象编程_类的引入_P【学习笔记】
2024-08-26 10:26:53
摘要:韦东山android视频学习笔记
1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字。代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添加上"广东",对于数量少还是比较方便,数量多还是很麻烦的。
#include <stdio.h> int main(void)
{
char *name1 = "zhangsan";
char *name2 = "lisi"; printf("%s\r\n",name1);
printf("%s\r\n",name2); return 0;
}
2.针对上述程序,我们先引入一个persion结构体。
#include <stdio.h> struct persion{
char *name;
}; int main(void)
{
struct persion p1 = {"zhangsan"};
struct persion p2 = {"lisi"}; printf("%s\r\n",p1.name);
printf("%s\r\n",p2.name); return ;
}
3 在上述的代码基础上,我们在persion结构体加入一个打印名字的函数指针。如下是最终版,这样的话,我们想调整输出的名字,要加上或去掉广东都很方便,只要在
printname函数里操作就可以了。
#include <stdio.h> struct persion{
char *name;
void (*printname)(struct persion *per);
}; void printname(struct persion *per)
{
printf("guangdong %s\n",per->name);
} int main(void)
{
struct persion p1 = {"zhangsan",printname};
struct persion p2 = {"lisi",printname}; p1.printname(&p1);
p2.printname(&p2); return ;
}
编译运行,结果如下图:
4.在java中我们写出同样的程序,输出张三、李四两个人的姓名
class Persion {
String name;
String getName(){
return "guangdong " + name;
}
} public class Oop{
public static void main(String args[]){
Persion p1 = new Persion();
p1.name = "zhangsan"; Persion p2 = new Persion();
p2.name = "lisi"; System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
5 在4代码的基础上我们,添加构造函数,在定义对象的时候就把名字传递过去,构造函数的名字跟类名一样,在构造这个对象的时候就会自动执行这个构造方法。
class Persion {
String name;
String getName(){
return "guangdong " + name;
} public Persion(String n){
name = n;
}
} public class Oop2{
public static void main(String args[]){
Persion p1 = new Persion("zhangsan"); Persion p2 = new Persion("lisi"); System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
编译运行结果如下:
6 在5代码的基础上,进行构造函数的重载,同时引入this,如果在一个类里面,类的属性与函数的参数名同名,我们加上this修饰表示是当前对象的属性。
class Persion {
String name;
int age;
String getName(){
return "guangdong " + name;
} public Persion(){
name = "null";
age = 0;
} public Persion(String name){
this.name = name; // this.name表示是当前对象属性的name不是函数参数的name
} public Persion(String name,int age){
this.name = name;
this.age = age;
}
} public class Oop3{
public static void main(String args[]){
Persion p1 = new Persion("zhangsan");
Persion p2 = new Persion("lisi");
Persion p3 = new Persion();
Persion p4 = new Persion("wangwu",6); System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p3.getName());
System.out.println(p4.getName());
}
}
编译运行结果如下:
7 在6代码的基础上,我们添加类方法printPerson,那样我们不需要定义具体的类对象我们就可以直接用这个方法,同时我们添加一个类属性count,用来统计人数的多少。
class Persion {
static int count;
String name;
int age;
String getName(){
return "guangdong " + name;
} public Persion(){
count ++;
name = "null";
age = 0;
} public Persion(String name){
count ++;
this.name = name;
} public Persion(String name,int age){
count ++;
this.name = name;
this.age = age;
} static void printPersion(){
System.out.println("This is a class of Persion");
}
} public class Oop4{
public static void main(String args[]){
Persion p1 = new Persion("zhangsan");
Persion p2 = new Persion("lisi");
Persion p3 = new Persion();
Persion p4 = new Persion("wangwu",6); System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p3.getName());
System.out.println(p4.getName()); Persion.printPersion();
System.out.println(Persion.count);
}
}
编译运行结果如下:
8.在7代码的基础上,我们引入构造代码块, 每实例化一个对象前,都执行;先于构造方法执行。7的例子中我们要在每个构造函数进行count ++,有了构造代码块我们只需要在构造代码块写一次就够了。同时引入静态构造代码块,实例化第一个对象前,执行;只执行一次。
class Persion {
static int count;
String name;
int age;
String getName(){
return "guangdong " + name;
} static {
System.out.println("static block");
} {
count ++;
System.out.println("construct block");
} public Persion(){
System.out.println("construct method:Persion 1");
name = "null";
age = 0;
} public Persion(String name){
System.out.println("construct method:Persion 2");
this.name = name;
} public Persion(String name,int age){
System.out.println("construct method:Persion 3");
this.name = name;
this.age = age;
} static void printPersion(){
System.out.println("This is a class of Persion");
}
} public class Oop5{
public static void main(String args[]){
Persion p1 = new Persion("zhangsan");
Persion p2 = new Persion("lisi");
Persion p3 = new Persion();
Persion p4 = new Persion("wangwu",6); System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p3.getName());
System.out.println(p4.getName()); Persion.printPersion();
System.out.println(Persion.count);
}
}
编译运行,结果如下:
相关代码存放在github,可以下载https://github.com/zzb2760715357/100ask
最新文章
- hdu----(1849)Rabbit and Grass(简单的尼姆博弈)
- Microsoft Azure 01 (Summarize)
- [转]linux下svn命令大全
- 边表+SPFA
- Java集合——List接口
- How to compile and install NCAR Command Language on IBM PowerPC 64 --- NCL编译安装步骤
- sphinx中过滤的简单介绍
- bug经验
- poj1410
- [产值分析]生产部KPI考核之产值分析
- 被FusionCharts V3.4抛弃的东西
- Android开发(25)--framebyframe帧动画并实现启动界面到主界面的跳转
- ES6入门
- idea 创建多模块依赖Maven项目
- Dubbo框架应用之(一)--服务体系
- java获取客户端ip地址工具类
- (转载)(int)a、&;a、(int)&;a、(int&;)a的区别,很偏僻的题
- Centos7.0下Nexus私服搭建
- JFinal Model判断数据库某条记录的属性字段是否包含空值
- easymock快速入门