调用类的普通方法
class Lear{ public static void learn(){ System.out.println("we learn java and oracle"); }}public class Oij{ public static void main(String args[]){ //类 对象=new 类(); Lear l=new Lear(); //实例化 l.learn(); //对象调用方法 }}
实例化类的语法(使用)
类名 对象=new 类名();
调用类的属性
class Person{ String name; int age; public String say(){ return "姓名:"+name+",年龄:"+age; }}public class Oij{ public static void main(String args[]){ Person per=null; per=new Person(); //Person per=new Person(); //实例化 per.name="sdsd"; //通过对象调用属性 per.age=18; //通过对象调用属性 String str=per.say(); //通过对象调用方法 System.out.println(str); }}
先给出内存空间的两块区域
堆内存:保存所有的对象的属性,需要使用new关键字来开辟。
栈内存:保存堆对象的地址。
堆内存开辟一块空间(对象实例化)
只要堆内存开辟一块空间,必须使用new关键字。
经典异常:java.lang.NullPointerException
抛NPE(空指针、空指向)
引用传递
class Person{ String name; int age; public String say(){ return "姓名:"+name+",年龄:"+age; }}public class Oij{ public static void main(String args[]){ Person p1=new Person(); p1.name="xxx"; p1.age=23; Person p2=new Person(); p2.name="yyy"; p2.age=22; p2=p1; //地址改变了 System.out.println(p1.say()); // System.out.println(p2.say()); // }}
没有栈内存指向的堆内存对象称之为垃圾。GC垃圾回收,不定期的清理
封装(简单的封装)
class Person{ private String name; //私有的 private int age; //私有的 public void setName(String n){ name=n; } public void setAge(int a){ age=a; } public String say(){ return "姓名:"+name+",年龄:"+age; }}public class Oij{ public static void main(String args[]){ Person p1=new Person(); p1.setName("sss"); //p1.name="王世龙"; p1.setAge(23); System.out.println(p1.say()); //姓名:王世龙,年龄:23 }}
所有的java开发之中,属性都设置private,要想访问私有属性,必须使用setter、getter方法。
以name属性为例,setter方法:setName();getter方法:getName()
还有getInfo()方法,返回所有变量的值。
构造方法:
实例化语法:
(1)类名 (2)对象名=(3)new (4)类名();
(1) 我们可以定义自己类
(2) 我们自己起的名字,一般首字母小写
(3) 一旦new表示在内存开辟空间
(4) Person(),构造方法
构造方法一般用来做一些初始化的工作,他只在实例化的时候被调用一次。
构造方法及其重载
public Person(){ //构造方法 System.out.println("***"); } public Person(String n,int a){ //构造方法重载 name=n; age=a; }
Person p=null;
p=new Person("德玛西亚",25);/*主方法调用*/
System.out.println(p.getName()+" "+p.getAge());
匿名对象
System.out.println(new Person("德玛西亚",25).getInfo());
构造方法与普通方法的区别:
构造方法只在实例化的时候被调用1次。
普通方法可以被对象调用多次。
简单Java类
(1) 首先类名必须有意义,首字母大写,Book,Person,Student,JiaGe。
(2) 所有属性(变量),必须使用private封装。
(3) 提供setter、getter方法。setXxx(),getXxx()。
(4) 可以提供多个构造方法,但是至少保留一个无参构造。(防止重载错误,书写重载后系统不提供无参数方法的隐式启动,必须显式启动。)
(5) 类中不允许使用输出语出,必须交给主类的主方法来处理。返回信息的方法,方法名暂时定位getInfo();
构造方法参考Demo
package Empdept;class Emp{/*员工数据库*/ private int empno; private String ename; private String job; private int mgr; private String hiredate; private double sal; private double comm; private int deptno; public Emp(){};/*构造方法,无参构造用于重载,避免错误,一定要注意构造方法重载时的默认值,系统不自动初始化,特别注意!!!*/ public Emp(int empempno,String empename,String empjob,int empmgr, String emphiredate, double empsal,double empcomm,int empdeptno){ empno=empempno; ename=empename; job=empjob; mgr=empmgr; hiredate=emphiredate; sal=empsal; comm=empcomm; deptno=empdeptno; } public void setEmpno(int empempno){ empno=empempno; } public int getEmpno(){ return empno; } public void setEname(String empename){ ename=empename; } public String getEname(){ return ename; } public void setJob(String empjob){ job=empjob; } public String getJob(){ return job; } public void setMgr(int empmgr){ mgr=empmgr; } public int getMgr(){ return mgr; } public void setHiredate(String emphiredate){ hiredate=emphiredate; } public String getHiredate(){ return hiredate; } public void setSal(Double empsal){ sal=empsal; } public double getSal(){ return sal; } public void satComm(int empcomm){ comm=empcomm; } public double getComm(){ return comm; } public void satDeptno(int empdeptno){ deptno=empdeptno; } public double getDeptno(){ return deptno; } public String getInfo(){ return "员工号: " + empno+",员工姓名: "+ ename+",所在部门: "+job+","+ "管理人员号: "+mgr+"," + "入职时间: "+hiredate+",工资: "+sal+","+ "加班费: "+comm+",所在部门编号: "+deptno; } }/*部门表*/class Dept{ private int deptno; private String dname; private String loc; public Dept(int deptdeptno,String deptdname,String deptloc){ deptno=deptdeptno; dname=deptdname; loc=deptloc; } public void setDeptno(int deptdeptno){ deptno=deptdeptno; } public int getDeptno(){ return deptno; } public void setDname(String deptname){ dname=deptname; } public String getDname(){ return dname; } public void setLoc(String deptloc){ loc=deptloc; } public String getLoc(){ return loc; } public String getInfo(){ return "部门编号: " + deptno+"部门名称: " + dname+"所在地: " +loc; } }public class Empdept { public static void main(String[] args) { Emp emp=new Emp(01,"乔乔","经理",7903,"1992.02.01",2345.5,200,30);//实例化 Dept dept=new Dept(123, "计算机部", "大连"); System.out.println(emp.getInfo()); System.out.println(); System.out.println(dept.getInfo()); }}
普通方法参考Demo
package databasesduixiang;//学生数据库/*学生信息表*/class Student { private String studentNo; private String studentName; private String sex; private String birthday; private String department; public void setStudentno(String no) { studentNo = no; } public String getStudentno() { return studentNo; } public void setStudentname(String name) { studentName = name; } public String getStudentname() { return studentName; } public void setSex(String studentsex) { sex = studentsex; } public String getSex() { return sex; } public void setBirthday(String studentbirthday) { birthday = studentbirthday; } public String getBirthday() { return birthday; } public void setDepartment(String studentdepartment) { department = studentdepartment; } public String getDepartment() { return department; } public String getInfo() { return "学号:" + studentNo + ",姓名:" + studentName + ",性别:" + sex + ",出生年月日:" + birthday + "所在系:" + department; }}/*学生成绩表*/class Sc { private String studentNo; private String courseNo; private double grade; public void setStudentno(String studentno) { studentNo = studentno; } public String getStudentno() { return studentNo; } public void setCourseno(String courseno) { courseNo = courseno; } public String getCourseno() { return courseNo; } public void setGrade(Double studentgrade) { grade = studentgrade; } public double getGrade() { return grade; } public String getInfo() { return "学号:" + studentNo + ", 课程号:" + courseNo + ",学生成绩:" + grade; }}/*课程表*/class Course { private String courseNo; private String courseName; private String previousNo; private int credit; public void setCourseno(String courseno) { courseNo = courseno; } public String getCourseno() { return courseNo; } public void setCoursename(String coursename) { courseName = coursename; } public String getCoursename() { return courseName; } public void setPreviousno(String previousno) { previousNo = previousno; } public String getPreviousno() { return previousNo; } public void setCredit(int studentcredit) { credit = studentcredit; } public int getCredit() { return credit; } public String getInfo() { return "课程号: " + courseNo + ", 课程名称:" + courseName + ",先修课课程号:" + previousNo + "学分:" + credit; }}public class Databasesduixiang { public static void main(String[] args) { Student student = new Student(); Sc sc = new Sc(); Course course = new Course();//实例化 student.setStudentno("123"); student.getStudentno(); student.setStudentname("aaa"); student.getStudentname(); student.setSex("女"); student.getSex(); student.setBirthday("1995.12.31"); student.getBirthday(); student.setDepartment("计算机科学与技术系"); student.getDepartment();//学生表信息初始化 sc.setStudentno("12341234"); sc.getStudentno(); sc.setCourseno("45678"); sc.getCourseno(); sc.setGrade(87.5); sc.getGrade();//学生成绩表信息初始化 course.setCourseno("12121"); course.getCourseno(); course.setCoursename("计算机组成原理"); course.getCoursename(); course.setPreviousno("34567"); course.getCourseno(); course.setCredit(10); course.getCredit();//课程表信息初始化 System.out.println(student.getInfo()); System.out.println(); System.out.println(sc.getInfo()); System.out.println(); System.out.println(course.getInfo());//输出信息 }}