- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章java基础的详细了解第六天由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
。
首先需要提醒的是,在整个Java之中,this是最麻烦的一个关键字,只要是代码开发,几乎都离不开this。在Java中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、普通方法:之前强调过,如果现在要调用的是本类之中的方法,则可以使用“this.方法()”调用.
2、构造方法:调用其他构造使用“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()调用构造方法的时候有以下问题:
1、所有的构造方法实在对象实例化的时候被默认调用,而且是在调用普通方法之前调用,所以使用“this()”调用构造方法的操作,一定要放在构造方法的首行; 。
2、如果一个类之中存在了多种构造方法的话,并且这些构造方法都使用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(); } }
。
程序一 。
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); //30 System.out.println(message.getNum()); } public static void fun(Message temp){ //引用传递 temp.setNum("30"); } }
程序二 。
public class TestDemo2{ public static void main(String args[]){ String str = "hello"; fun(str); //hello System.out.println(str); } public static void fun(String temp){ temp = "world"; } }
本程序的关键是:String的内容一旦声明则不可改变,改变的是内存的地址指向.
。
对象的比较实际就是对象属性的比较.
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); //false System.out.println(per1==per2); //比较两个对象的地址 //是同一个对象 if(per1.getName().equals(per2.getName())&&per1.getAge() == per2.getAge()){ System.out.println("是同一个对象"); } else{ System.out.println("不是同一个对象"); } } }
对象比较的操作一定是一个类自己本身所具备的功能,而且对象比较的操作特点:
。
//电脑 class Computer{ private View []; private Host; } //显示器 class View{ } //主机 class Host{ private Board; } //主板 class Board{ private Cpu []; private Memory[]; private Disk[]; } //CPU class Cpu{ } //内存 class Memory{ } //硬盘 class Disk{ } public class TestDemo3{ public static void main(String args[]){ } }
。
利用此关系模型,表示出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}); //第二步、进行数据的取得 //一个部门有多个雇员 /* 【Emp】 empno = 7345,ename = Rock,job = CLERK,sal = 800.0,comm = 0.0 【Emp】 empno = 7567,ename = Joker,job = MANAGER,sal = 3050.0,comm = 0.0 【Emp】 empno = 7825,ename = Ben,job = PRESIDENT,sal = 10000.0,comm = 0.0 */ for(int i = 0; i
在上面的代码基础上进行改进 。
//一个部门有多个雇员,一个雇员有一个领导,一个雇员属于同个部门 /* 【Emp】 empno = 7345,ename = Rock,job = CLERK,sal = 800.0,comm = 0.0 该雇员所属的领导【Emp】 empno = 7567,ename = Joker,job = MANAGER,sal = 3050.0,comm = 0.0 该雇员所属的部门deptno = 10,dname = 市场部,loc = New York ------------------------------------------------------------------ 【Emp】 empno = 7567,ename = Joker,job = MANAGER,sal = 3050.0,comm = 0.0 该雇员所属的领导【Emp】 empno = 7825,ename = Ben,job = PRESIDENT,sal = 10000.0,comm = 0.0 该雇员所属的部门deptno = 10,dname = 市场部,loc = New York ------------------------------------------------------------------ 【Emp】 empno = 7825,ename = Ben,job = PRESIDENT,sal = 10000.0,comm = 0.0 自己就是领导 ------------------------------------------------------------------ */ for(int i = 0; i
。
利用此关系模型,表示出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) }); //第二步、进行数据的取得 //可以找到一门课程,参加此次课程的所有学生信息和成绩 /* 【Course】cid = 1,name = 数据结构,credit = 4.0 学生名单:【Student】stuid = 107,name = Rock,age = 13,成绩:78.0 学生名单:【Student】stuid = 108,name = Joker,age = 18,成绩:87.0 学生名单:【Student】stuid = 109,name = Perke,age = 22,成绩:90.0 */ System.out.println(ca.getCouInfo()); for(int i = 0 ;i
。
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我的更多内容! 。
原文链接:https://blog.csdn.net/zsr6135/article/details/119322317 。
最后此篇关于java基础的详细了解第六天的文章就讲到这里了,如果你想了解更多关于java基础的详细了解第六天的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
目录 进程 其他相关概念 创建线程的两种方式 为什么使用start()方法而不直接使用run()方法 start()方法底层
CURL状态码列表 状态码 状态原因 解释 0 正常访问
ODBC连接类函数 odbc_connect函数:打开一个ODBC连接 odbc_close函数:关闭一个已经打开的ODBC连接 odbc_close_all函数:关闭所有已经打开的ODBC连
作为标题,如何计算从纪元1900到现在使用boost的持续时间? 编辑:很抱歉以前的问题太短。我将再次描述我的问题。 我有关于将生日另存为整数的问题。我创建了四个函数,用法如下: ptime转换为整数
前言 在Java中,有一个常被忽略 但 非常重要的关键字Synchronized今天,我将详细讲解 Java关键字Synchronized的所有知识,希望你们会喜欢 目录 1. 定义 J
详细 JVM 垃圾收集日志的时间戳是收集的开始还是结束? 2016-08-09T21:04:19.756-0400: 224890.317: [GC Desired survivor size 167
我在“Master-Detail”概念上苦苦挣扎,除了一点点(但很重要)的细微差别外,几乎所有东西都按预期工作。我应该在 Storyboard上更改什么以在详细信息 View (屏幕截图底部的右上角)
我希望能够显示表格的详细 View ,但不推送新屏幕,而只显示表格所在的详细 View 。 设置它的最佳方式是什么......如果真的可行的话? ---------------------------
我在我的博客中为我的帖子使用了详细 View ,每篇帖子都有评论,所以我想对它们进行分页,但我不知道该怎么做,因为我请求了帖子模型。我知道如何在功能 View 中执行此操作,但不知道如何在详细 Vie
在下面的代码中,与 pm 对齐,该行是否会 move 整个内存并将其分配给 pm,或者它只会 move p 指向的内存而不是整个数组? int main() { int*
1·下载 https://dev.mysql.com/downloads/mysql/ 2·安装服务 1)管理员运行cmd 2)D: 3)cd D:\mysql
今天以前一直用的SQL Server 2005做开发,偶尔也用MySQL,现入手公司项目,用到SQL Server 2008,于是乎必须安装它,免得出现其他很纠结的小问题,现将自己安装图解分享如下:
1. crontab命令选项 复制代码 代码如下: #crontab -u <-l, -r, -e> -u指定一个用
我们有一个 WPF 应用程序,它有一个主窗口/详细信息窗口,两者都是 WPF 数据网格。当您在上部数据网格中选择一行时,详细信息将显示在下部数据网格中。我想知道从 UI 的角度来看是否有任何关于如何处
在可视化 Perforce 客户端 (p4v) 中有一个选项: 显示文件操作的 p4 命令输出 启用后,在日志 Pane 中,我可以看到这样的详细日志记录: p4 sync /Users/az/ftp
在其他服务器上设置测试环境后,在几个API调用中出现错误。 99%肯定这是MySQL的事情,但是返回的错误根本没有帮助: global name 'sys' is not defined" 我已经导入
我正在维护一个通用的 iOS 应用程序,其开发已开始于 iOS 6。我正在为 iOS 7 更新 UI。现在我遇到了应用程序的 iPad 部分的奇怪问题。这部分遵循使用 UISplitViewContr
我希望我能正确描述这种情况。当它发生时很容易在屏幕上看到,但很难用语言解释,但我会尽力而为。 我有一个带有固定主视图 (UITableView) 和两个详细 View 之一的 UISplitViewC
我尝试在 eclipse 和 intelliJ 参数中使用垃圾收集记录器来配置简单的测试程序。尝试了不同类型的配置,但尚未创建日志文件。 -XX:+PrintGCDetails -XX:+PrintG
正如您所知,.cap 文件中的 java 小程序的输出文件格式必须通过智能卡读卡器/写卡器(如 ACR122 或任何其他读卡器)部署到 java 卡,而且我相信 java 卡与 java 卡之间的部署
我是一名优秀的程序员,十分优秀!