面向对象
调用类的普通方法
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());//输出信息 } }