面向对象

Posted Oracle&Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

调用类的普通方法

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());//输出信息

	}

}

  

 

以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

Scala的面向对象与函数编程

Python面向对象学习之八,装饰器