iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java基础之this的示例分析
  • 265
分享到

java基础之this的示例分析

2023-06-20 20:06:06 265人浏览 泡泡鱼
摘要

小编给大家分享一下Java基础之this的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、this关键字首先需要提醒的是,在整个Java之中,this是

小编给大家分享一下Java基础之this的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    1、this关键字

    首先需要提醒的是,在整个Java之中,this是最麻烦的一个关键字,只要是代码开发,几乎都离不开this。在Java中this可以完成三件事情:表示本类属性、表示本类方法、表示当前对象(只介绍概念)。

    1.1 “this.属性”表示本类属性

    在讲解着一操作之前首先观察如下程序:

    class Person{private String name;private int age;public Person(String n,int a){name = n;age = a;}public String getInfo(){return "姓名:"+name+","+"年龄:"+age;}}public class ThisText{public static void main(String args[]){Person per = new Person("张三",20);System.out.println(per.getInfo());}}

    这个时候的构造方法的两额参数的目的是为了类中的name和age两额属性初始化,可是这个方法上的两个参数一个是字母n一个是字母a,什么意思?那么最好的做法,既然构造方法的两个参数是为了类中name和age初始化使用,那么最好将其参数名称也定义为name和age才最为直观。

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

    此时构造方法中参数的名称变得有意义了,但是这样一来就出现问题了,发现属性没有内容了!因为在程序之中是采用“{}”作为分界,采用就近的取用原则,所以现在为了明确指定要操作的是类中属性的话,那么应该采用“this.属性”的形式完成,代码应该变为:

    public Person(String name,int age){   this.name = name;     //this.name   表示类中的属性name   this.age = age;}

    提示:在日后的所有开发过程之中,如果要调用类中属性的话,都要使用“this.属性”的方式来调用。

    1.2“this”表示调用本类方法

    对于一个类之中的方法分为两种:

    普通方法:之前强调过,如果现在要调用的是本类之中的方法,则可以使用“this.方法()”调用。

    构造方法:调用其他构造使用“this ()”调用。

    例如:现在一个类之中存在了三个构造方法(无参、有一个参数、有两个参数),但是不管使用何种构造方法,都要求在实例化对象产生的时候输出一行提示信息:“欢迎光临”。

    class Person{private String name;private int age;public Person(){System.out.println("-----欢迎光临-----");}public Person(String name){System.out.println("-----欢迎光临-----");this.name = name;}public Person(String name,int age){System.out.println("-----欢迎光临-----");this.name = name;this.age = age;}public String getInfo(){return "姓名:"+name+","+"年龄:"+age;}}public class ThisText1{public static void main(String args[]){Person per = new Person();System.out.println(per.getInfo());}}

    不过,遗憾的是按照之前的知识来讲,此时的程序之中会出现大量的重复代码,而这样的方法不是最优的。

    这种情况下就可以利用this()来完成

    class Person{private String name;private int age;public Person(){System.out.println("-----欢迎光临-----");}public Person(String name){this();           //调用无参构造方法this.name = name;}public Person(String name,int age){this(name);   //调用有一个参数的构造方法this.age = age; }public String getInfo(){return "姓名:"+name+","+"年龄:"+age;}    public class ThisText1{public static void main(String args[]){Person per = new Person();System.out.println(per.getInfo());}}

    使用this()就完成了构造方法之间的互相调用。

    **注意:**在使用this()调用构造方法的时候有以下问题:

    所有的构造方法实在对象实例化的时候被默认调用,而且是在调用普通方法之前调用,所以使用“this()”调用构造方法的操作,一定要放在构造方法的首行;

    如果一个类之中存在了多种构造方法的话,并且这些构造方法都使用this()相互调用,那么至少要保证一个构造方法没有调用其他构造,以作程序的出口。

    1.3“this”表示当前对象

    class Dx{public void fun(){System.out.println("当前对象:" + this);}}public class Ob{public static void main(String args[]){Dx dx = new Dx();System.out.println(dx);dx.fun();Dx dx1 = new Dx();System.out.println(dx1);dx1.fun();}}

    java基础之this的示例分析

    1.4引用传递进阶分析

    程序一

    class Message{private String num;public void setNum(String num){this.num = num;}public String getNum(){return num;}}public class TestDemo1{public static void main(String args[]){Message message = new Message();message.setNum("100");fun(message);//30System.out.println(message.getNum());}public static void fun(Message temp){//引用传递temp.setNum("30");}}

    java基础之this的示例分析

    程序二

    public class TestDemo2{public static void main(String args[]){String str = "hello";fun(str);//helloSystem.out.println(str);}public static void fun(String temp){temp = "world";}}

    本程序的关键是:String的内容一旦声明则不可改变,改变的是内存的地址指向。

    java基础之this的示例分析

    1.5对象比较

    对象的比较实际就是对象属性的比较。

    class Person{private String name;private int age;public Person(String name,int age){this.name = name;this.age = age;}public void setName(String name){this.name = name;}public void setAge(int age){this.age = age;}public String getName(){return this.name;}public int getAge(){return this.age;}}public class TestDemo3{public static void main(String args[]){Person per1 = new Person("张三",20);Person per2 = new Person("张三",20);//falseSystem.out.println(per1==per2);//比较两个对象的地址//是同一个对象if(per1.getName().equals(per2.getName())&&per1.getAge() == per2.getAge()){System.out.println("是同一个对象");}else{System.out.println("不是同一个对象");}}}

    对象比较的操作一定是一个类自己本身所具备的功能,而且对象比较的操作特点:

    • 本类接收自己的引用,而后与本类当前对象(this)进行比较;

    • 为了避免NullPointerException的产生,应该增加一个null的判断;

    • 为了防止浪费性能的情况出现,可以增加地址数值的判断,相同的对象地址相同;

    • 之后与属性依次进行比较,如果属性全部相同,则返回true,否则返回false。

    1.6引用传递实际应用

    //电脑class Computer{private View [];private Host;}//显示器class View{}//主机class Host{private Board;}//主板class Board{private Cpu [];private Memory[];private Disk[];}//CPUclass Cpu{}//内存class Memory{}//硬盘class Disk{}public class TestDemo3{public static void main(String args[]){}}

    重点 1.7数据表与简单Java类(一对多)

    利用此关系模型,表示出emp和dept的关系,使用字段:

    **emp表:**empno、ename、job、sal、comm、mgr、deptno;

    **dept表:**deptno、dname、loc。

    第一步 编写实体类
    class Emp{private int empno;private String ename;private String job;private double sal;private double comm;public Emp(int empno,String ename,String job,double sal,double comm){this.empno = empno;this.ename = ename;this.job = job;this.sal = sal;this.comm = comm;}public String getEmpInfo(){return "【Emp】 empno = " + this.empno +",ename = " + this.ename +",job; = " + this.job +",sal = " + this.sal +",comm = " + this.comm;}}class Dept{private int deptno;private String dname;private String loc;public Dept(int deptno, String dname, String loc){this.deptno = deptno;this.dname = dname;this.loc = loc;}public String getDept(){return "deptno = " + this.deptno +",dname = " + this.dname +",loc = " + this.loc;}}public class Exam1_7{public static void main(String args[]){}}
    第二步 进行关系设计

    一个雇员属于一个部门,需要追加部门引用

    一个雇员有一个领导,领导一定是自身关联

    一个部门有一个雇员,需要一个对象数组来描述多个雇员信息

    class Emp{private int empno;private String ename;private String job;private double sal;private double comm;private Emp mgr; //描述雇员的领导private Dept dept;//描述雇员的部门public Emp(int empno,String ename,String job,double sal,double comm){this.empno = empno;this.ename = ename;this.job = job;this.sal = sal;this.comm = comm;}public void setMgr(Emp mgr){this.mgr  = mgr;}public Emp getMgr(){return this.mgr;}public void setDept(Dept dept){this.dept = dept;}public Dept getDept(){return this.dept;}public String getEmpInfo(){return "【Emp】 empno = " + this.empno +",ename = " + this.ename +",job; = " + this.job +",sal = " + this.sal +",comm = " + this.comm;}}class Dept{private int deptno;private String dname;private String loc;private Emp [] emps;//一个部门有多个雇员public Dept(int deptno, String dname, String loc){this.deptno = deptno;this.dname = dname;this.loc = loc;}public void setEmps(Emp [] emps){this.emps = emps;}public Emp [] getEmps(){return this.emps;}public String getDept(){return "deptno = " + this.deptno +",dname = " + this.dname +",loc = " + this.loc;}}public class Exam1_7{public static void main(String args[]){}}

    此时基本类定义完成。

    第三步 开发需求

    主函数main

    public class Exam1_7{public static void main(String args[]){//第一步、设置类对象的关系//1.分别创建各自对象实例化Dept dept = new Dept(10,"市场部","New York");Emp ea = new Emp(7345,"Rock","CLERK",800.0,0);Emp eb = new Emp(7567,"Joker","MANAGER",3050.0,0);Emp ec = new Emp(7825,"Ben","PRESIDENT",10000.0,0);//2.设置雇员和领导的关系ea.setMgr(eb);eb.setMgr(ec); //ec没有领导 自己就是最大的领导//3.设置雇员和部门的关系ea.setDept(dept);eb.setDept(dept);ec.setDept(dept);//4.设置部门的雇员dept.setEmps(new Emp[]{ea, eb, ec});//第二步、进行数据的取得//一个部门有多个雇员for(int i = 0; i <  dept.getEmps().length; i++){System.out.println(dept.getEmps()[i].getEmpInfo());}System.out.println();//一个雇员有一个领导//【Emp】 empno = 7567,ename = Joker,job = MANAGER,sal = 3050.0,comm = 0.0System.out.println(ea.getMgr().getEmpInfo());//【Emp】 empno = 7825,ename = Ben,job = PRESIDENT,sal = 10000.0,comm = 0.0System.out.println(eb.getMgr().getEmpInfo());//Exception in thread "main" java.lang.NullPointerException //没有设置关系 所以自己是老板 显示空指针异常//System.out.println(ec.getMgr().getEmpInfo());System.out.println();//一个雇员属于同个部门//deptno = 10,dname = 市场部,loc = New YorkSystem.out.println(ea.getDept().getDeptInfo());//deptno = 10,dname = 市场部,loc = New YorkSystem.out.println(eb.getDept().getDeptInfo());//deptno = 10,dname = 市场部,loc = New YorkSystem.out.println(ec.getDept().getDeptInfo());}}

    在上面的代码基础上进行改进

    //一个部门有多个雇员,一个雇员有一个领导,一个雇员属于同个部门 for(int i = 0; i <  dept.getEmps().length; i++){System.out.println(dept.getEmps()[i].getEmpInfo());if(dept.getEmps()[i].getMgr() != null){System.out.println("该雇员所属的领导" +dept.getEmps()[i].getMgr().getEmpInfo());System.out.println("该雇员所属的部门" +dept.getEmps()[i].getDept().getDeptInfo());System.out.println("------------------------------------------------------------------");}else{System.out.println("自己就是领导");System.out.println("------------------------------------------------------------------");}}

    1.8数据表与简单Java类(多对多)

    利用此关系模型,表示出student和course的关系,使用字段:

    **student表:**stuid、name、age。

    **course表:**cid、name、credit。

    关系表:学生编号、课程编号、成绩

    要求:

    可以找到一门课程,参加此次课程的所有学生信息和成绩

    可以根据一个学生,找到所参加的所有课程和没门课程的一个成绩

    第一步 编写实体类
    class Student{private int stuid;private String name;private int age;public Student(int stuid, String name, int age){this.stuid = stuid;this.name = name;this.age = age;}public String getStuInfo(){return "【Student】stuid = " + this.stuid +",name = " + this.name +",age = " +this.age ;}}class Course{private int cid;private String name;private double credit;public Course(int cid, String name, double credit){this.cid = cid;this.name = name;this.credit = credit;}public String getCouInfo(){return "【Course】cid = " + this.cid +",name = " + this.name +",credit = " + this.credit;}}class StudentCourse{//学生选课private Student student;private Course course;private double score;public StudentCourse(Student student, Course course, double score){this.student =student;this.course = course;this.score = score;}public Student getStudent(){return this.student;}public Course getCrouse(){return this.course;}public double getScore(){return this.score;}}
    第二步 进行关系设计
    class Student{private int stuid;private String name;private int age;private StudentCourse studentCourses [];public Student(int stuid, String name, int age){this.stuid = stuid;this.name = name;this.age = age;}public void setStudentCourses(StudentCourse []studentCourses){this.studentCourses = studentCourses;}public StudentCourse[] getStudentCourses(){return this.studentCourses;}public String getStuInfo(){return "【Student】stuid = " + this.stuid +",name = " + this.name +",age = " +this.age ;}}class Course{private int cid;private String name;private double credit;private StudentCourse studentCourses[];public Course(int cid, String name, double credit){this.cid = cid;this.name = name;this.credit = credit;}public void setStudentCourses(StudentCourse []studentCourses){this.studentCourses = studentCourses;}public StudentCourse[] getstudentCourses(){return this.studentCourses;}public String getCouInfo(){return "【Course】cid = " + this.cid +",name = " + this.name +",credit = " + this.credit;}}class StudentCourse{//学生选课private Student student;private Course course;private double score;public StudentCourse(Student student, Course course, double score){this.student =student;this.course = course;this.score = score;}public Student getStudent(){return this.student;}public Course getCrouse(){return this.course;}public double getScore(){return this.score;}}
    第三步 开发需求

    主函数main

    public class Exam1_8{public static void main(String args[]){//第一步、设置类对象的关系//1.分别创建各自对象实例化Student stu1 = new Student(107,"Rock",13);Student stu2 = new Student(108,"Joker",18);Student stu3 = new Student(109,"Perke",22);Course ca = new Course(1,"数据结构",4.0);Course cb = new Course(2,"计算机操作系统",2.0);Course cc = new Course(3,"SSM框架集合",3.0);//2.设置学生和课程的关系stu1.setStudentCourses(new StudentCourse[]{new StudentCourse(stu1,ca,78.0),});stu2.setStudentCourses(new StudentCourse[]{new StudentCourse(stu2,ca,87.0),new StudentCourse(stu2,cb,79.0)});stu3.setStudentCourses(new StudentCourse[]{new StudentCourse(stu3,ca,90.0),new StudentCourse(stu3,cb,95.0),new StudentCourse(stu3,cc,99.0)});//3.设置课程和学生的关系ca.setStudentCourses(new StudentCourse[]{new StudentCourse(stu1,ca,78.0),new StudentCourse(stu2,ca,87.0),new StudentCourse(stu3,ca,90.0)});cb.setStudentCourses(new StudentCourse[]{new StudentCourse(stu2,cb,79.0),new StudentCourse(stu3,ca,90.0)});cc.setStudentCourses(new StudentCourse[]{new StudentCourse(stu3,cc,99.0)});//第二步、进行数据的取得//可以找到一门课程,参加此次课程的所有学生信息和成绩System.out.println(ca.getCouInfo());for(int i = 0 ;i < ca.getStudentCourses().length ; i++){System.out.print("学生名单:"+ ca.getStudentCourses()[i].getStudent().getStuInfo());System.out.println(",score = "+ ca.getStudentCourses()[i].getScore());}System.out.println("--------------------------------------------------------------------"); //可以根据一个学生,找到所参加的所有课程和没门课程的一个成绩  System.out.println(stu3.getStuInfo());for(int i = 0; i < stu3.getStudentCourses().length ; i++){System.out.print("选课列表:" + stu3.getStudentCourses()[i].getCourse().getCouInfo());System.out.println(",score = "+ stu3.getStudentCourses()[i].getScore());}}}

    以上是“java基础之this的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: java基础之this的示例分析

    本文链接: https://www.lsjlt.com/news/300108.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • java基础之this的示例分析
      小编给大家分享一下java基础之this的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、this关键字首先需要提醒的是,在整个Java之中,this是...
      99+
      2023-06-20
    • Java基础之Maven的示例分析
      这篇文章将为大家详细讲解有关Java基础之Maven的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、Maven是什么?Maven是一个跨平台的项目管理工具。作为Apache组织的一个颇为成功的...
      99+
      2023-06-15
    • java基础之多态的示例分析
      小编给大家分享一下java基础之多态的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、多态性多态性是面向对象的最后一个特征,它本身主要分为两个方面: 方...
      99+
      2023-06-20
    • java基础之方法的示例分析
      这篇文章将为大家详细讲解有关java基础之方法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JAVA 异常分类及处理 异常分类Throwable 是 Java 语言中所有错误或异常的超类。下一层...
      99+
      2023-06-20
    • java基础之string类的示例分析
      这篇文章主要为大家展示了“java基础之string类的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java基础之string类的示例分析”这篇文章吧。1、String类1.1两种对象...
      99+
      2023-06-20
    • Java基础的示例分析
      小编给大家分享一下Java基础的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、Java主要特点简单性、跨平台性、分布性、安全性、健壮性、平台独立与可移...
      99+
      2023-06-20
    • java基础之关键字的示例分析
      这篇文章将为大家详细讲解有关java基础之关键字的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、static关键字1.1 使用static关键字定义属性在讲解static定义属性操作之前,首先...
      99+
      2023-06-20
    • Java基础之线程锁的示例分析
      这篇文章将为大家详细讲解有关Java基础之线程锁的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、 synchronized关键字对象锁a.当使用对象锁的时候,注意要是相同的对象,并且当有线程正...
      99+
      2023-06-20
    • Java基础之包装类的示例分析
      这篇文章将为大家详细讲解有关Java基础之包装类的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点...
      99+
      2023-06-15
    • Java基础之MapReduce框架的示例分析
      小编给大家分享一下Java基础之MapReduce框架的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、MapTask工作机制MapTask就是Map阶...
      99+
      2023-06-15
    • java基础之内部类的示例分析
      这篇文章主要为大家展示了“java基础之内部类的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java基础之内部类的示例分析”这篇文章吧。1、匿名内部类内部类:在一个类的内部定义了另外的...
      99+
      2023-06-20
    • Java基础之SpringBoot整合knife4j的示例分析
      这篇文章给大家分享的是有关Java基础之SpringBoot整合knife4j的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。插件的特点非常简洁清爽的UI设计,接口的快速搜索。支持个性化设置,个性化设置包...
      99+
      2023-06-15
    • Java基础之颜色工具类的示例分析
      这篇文章主要介绍Java基础之颜色工具类的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了Web MVC设计...
      99+
      2023-06-14
    • java基础之方法与对象的示例分析
      这篇文章主要介绍java基础之方法与对象的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、方法的基本定义限制条件:本次所讲解的方法指的是在主类中定义,并且由主方法由主方法直接调用。方法是指就是一段可以被重复...
      99+
      2023-06-20
    • java数组基础的示例分析
      这篇文章主要介绍java数组基础的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数组数组(Array):相同类型数据的集合。Java 数组初始化的两种方法: 静态初始化: 程序员在初始化数组时为数组每个元素赋...
      99+
      2023-05-30
      java 数组
    • Python基础之进程的示例分析
      这篇文章将为大家详细讲解有关Python基础之进程的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言进程,一个新鲜的字眼,可能有些人并不了解,它是系统某个运行程序的载体,这个程序可以有单个或...
      99+
      2023-06-15
    • Python基础之模块的示例分析
      这篇文章给大家分享的是有关Python基础之模块的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是模块容器 -> 数据的封装函数 -> 语句的封装类 -> 方法和属性的封装模块 ...
      99+
      2023-06-15
    • Javascript基础之类型的示例分析
      这篇文章主要介绍了Javascript基础之类型的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。基本类型  Javascript有5...
      99+
      2024-04-02
    • java中基础知识的示例分析
      这篇文章主要为大家展示了“java中基础知识的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中基础知识的示例分析”这篇文章吧。一.异常Java对异常的处理同Delphi一样,不是...
      99+
      2023-06-03
    • 正则基础之环视的示例分析
      这篇文章给大家分享的是有关正则基础之环视的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。环视(Lookaround)1  ...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作