Java面向对象基础

涎涎原创约 3684 字大约 12 分钟...JavaJava

191-Java面向对象基础.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

概念

           	      抽象(抽取共有的特质)

	对象(object) -------------------->  类(class)

	

				 具体化 | 实例化(new)

	类(class)-----------------------> 对象(Object)

	

	

	面向对象的三大特性:封装、继承、多态

	

	-------------------------------------------------------------------------------

	1.分析对象Object(计算机):

		  属性:品牌、显示器、主机、键盘、鼠标、颜色

		  行为:开机、关机

		     ||

		     ||

		     ||

		     ||

		     \/

    2.根据对象分析,编程代码中的类Class

    	 属性(全局变量、成员变量):品牌brand、显示器monitor、主机case、键盘keyboard、鼠标mouse、颜色color

		 行为(成员方法):开机turnOn()、关机turnOff()

	-------------------------------------------------------------------------------

	-------------------------------------------------------------------------------

	1.分析对象Object(灯):

		  属性:灯丝、灯罩、灯座

		  行为:开灯、关灯、调亮、调亮

		     ||

		     ||

		     ||

		     ||

		     \/

    2.根据对象分析,编程代码中的类Class

    	   属性(全局变量、成员变量):灯丝filament、灯罩lampshade、灯座lampholder

		  行为(成员方法):开灯on()、关灯off()、调亮lighten()、调暗dim()

	-------------------------------------------------------------------------------

	

	

	类的定义:

		   <修饰符>  class 类名

		   {

		   		//类的成员

		   		成员变量;

		   		成员方法;

		   		嵌套类(内部类);

		   }

		   

		   修饰符:public <default>

		   

		    类名:帕斯卡(pascal)规则命名,首字母大写,其余单词的首字母大写,例如HelloWorld

		    

		  注意:

		 	1.一个*.java源文件中仅允许存在一个public修饰的类

		 	2.public修饰的类的名称必须与*.java源文件名称大小写一致

		 	



	    类是创建对象的模板,对象是类的实例

	    

	    创建对象:

	 	   类名   对象名  = new 构造器();



	 	   

	    构造器(构造方法/构造器/构造函数,Constructor)

			1.具有与类相同的名称

			2.不含返回值类型

			3.不能在方法中用return语句返回一个值

			4. 一般访问权限为public

		  

		         在一个类中,具有上述特征的方法就是构造器。

   

	   构造器的作用:

			1.完成对象的创建,即完成对象的实例化。XiyoujiRole sunwukong = new XiyoujiRole();

			2.一般使用构造器来完成对成员变量的初始化。XiyoujiRole tangSeng = new XiyoujiRole("唐僧", "无", "☆☆☆☆☆", "★★★★★");



               注意:

           1.默认带无参构造函数

           2.当定义带参数构造函数时,默认无参构造函数失效了,需要显示定义出来

示例代码

package com.tencent.chapter06;

/**
 * <p>
 * Title: Light
 * </p>
 * <p>
 * Description:
 * 
 * 抽象(抽取共有的特质) 对象(object) --------------------> 类(class)
 * 
 * 具体化 | 实例化(new) 类(class)-----------------------> 对象(Object)
 * 
 * 
 * 面向对象的三大特性:封装、继承、多态
 * 
 * -------------------------------------------------------------------------------
 * 1.分析对象Object(计算机): 属性:品牌、显示器、主机、键盘、鼠标、颜色 行为:开机、关机 || || || || \/
 * 2.根据对象分析,编程代码中的类Class
 * 属性(全局变量、成员变量):品牌brand、显示器monitor、主机case、键盘keyboard、鼠标mouse、颜色color
 * 行为(成员方法):开机turnOn()、关机turnOff()
 * -------------------------------------------------------------------------------
 * -------------------------------------------------------------------------------
 * 1.分析对象Object(灯): 属性:灯丝、灯罩、灯座 行为:开灯、关灯、调亮、调亮 || || || || \/
 * 2.根据对象分析,编程代码中的类Class 属性(全局变量、成员变量):灯丝filament、灯罩lampshade、灯座lampholder
 * 行为(成员方法):开灯on()、关灯off()、调亮lighten()、调暗dim()
 * -------------------------------------------------------------------------------
 * 
 * 
 * 类的定义: <修饰符> class 类名 { //类的成员 成员变量; 成员方法; 嵌套类(内部类); }
 * 
 * 修饰符:public <default>
 * 
 * 类名:帕斯卡(pascal)规则命名,首字母大写,其余单词的首字母大写,例如HelloWorld
 * 
 * 注意: 1.一个*.java源文件中仅允许存在一个public修饰的类 2.public修饰的类的名称必须与*.java源文件名称大小写一致
 * 
 * -------------------------------------------------------------------------
 * 类是创建对象的模板,对象是类的实例
 * 
 * 创建对象: 类名 对象名 = new 构造器();
 * -------------------------------------------------------------------------
 * 
 * 构造器(构造方法/构造器/构造函数,Constructor) 1.具有与类相同的名称 2.不含返回值类型 3.不能在方法中用return语句返回一个值
 * 4. 一般访问权限为public
 * 
 * 在一个类中,具有上述特征的方法就是构造器。
 * 
 * 构造器的作用: 1.完成对象的创建,即完成对象的实例化。XiyoujiRole sunwukong = new XiyoujiRole();
 * 2.一般使用构造器来完成对成员变量的初始化。XiyoujiRole tangSeng = new XiyoujiRole("唐僧", "无",
 * "☆☆☆☆☆", "★★★★★");
 * 
 * 注意: 1.默认带无参构造函数 2.当定义带参数构造函数时,默认无参构造函数失效了,需要显示定义出来
 * </p>
 * 
 * @author xianxian
 * @date 2023年1月3日
 */
public class Light {
	/**
	 * 属性(全局变量、成员变量):灯丝filament、灯罩lampshade、灯座lampholder
	 */
	/** 灯丝 */
	String filament;

	/** 灯罩 */
	String lampshade;

	/** 灯座 */
	String lampholder;

	/**
	 * 行为(成员方法):开灯on()、关灯off()、调亮lighten()、调暗dim()
	 */
	/** 开灯 */
	public void on() {
		System.out.println("开灯.............");
	}

	/** 关灯 */
	public void off() {
		System.out.println("关灯.............");
	}

	/** 调亮 */
	public void lighten() {
		System.out.println("调亮   +1");
	}

	/** 调暗 */
	public void dim() {
		System.out.println("调暗   -1");
	}
}

class Computer {

}
package com.tencent.chapter06;

/**
 * <p>
 * Title: XiyoujiRole
 * </p>
 * <p>
 * Description: 西游记游戏软件中的游戏人物: 孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力五颗星 唐
 * 僧:唐僧没有武器,战斗力为零,耐力五颗星 猪八戒:猪八戒的武器是耙子,战斗力四颗星,耐力两颗星 沙 僧:沙僧的武器是月牙铲 ,战斗力三颗星,耐力四颗星
 * 
 * 属性:角色名称、武器、战斗力、耐力 行为:战斗、获取角色信息
 * 
 * -------------------------------------------------------------------------
 * 类是创建对象的模板,对象是类的实例
 * 
 * 创建对象: 类名 对象名 = new 构造器();
 * -------------------------------------------------------------------------
 * 
 * 构造器(构造方法/构造器/构造函数,Constructor) 1.具有与类相同的名称 2.不含返回值类型 3.不能在方法中用return语句返回一个值
 * 4. 一般访问权限为public
 * 
 * 在一个类中,具有上述特征的方法就是构造器。
 * 
 * 构造器的作用: 1.完成对象的创建,即完成对象的实例化。XiyoujiRole sunwukong = new XiyoujiRole();
 * 2.一般使用构造器来完成对成员变量的初始化。XiyoujiRole tangSeng = new XiyoujiRole("唐僧", "无",
 * "☆☆☆☆☆", "★★★★★");
 * 
 * 注意: 1.默认带无参构造函数 2.当定义带参数构造函数时,默认无参构造函数失效了,需要显示定义出来
 * </p>
 * 
 * @author xianxian
 * @date 2023年1月3日
 */
public class XiyoujiRole {
	// 属性:角色名称、武器、战斗力、耐力
	/** 角色名称 */
	String roleName;

	/** 武器 */
	String wuQi;

	/** 战斗力 */
	String zhanDouLi;

	/** 耐力 */
	String naiLi;

	/** 构造器(构造函数、构造方法) */
	public XiyoujiRole() {

	}

	/** 重载构造器(构造函数、构造方法) */
	public XiyoujiRole(String p_roleName, String p_wuQi, String p_zhanDouLi, String p_naiLi) {
		roleName = p_roleName;
		wuQi = p_wuQi;
		zhanDouLi = p_zhanDouLi;
		naiLi = p_naiLi;
	}

	// 行为:战斗、获取角色信息
	/** 战斗 */
	public void fight() {
		System.out.println("加血 +11111111111111111111");
	}

	/** 获取角色信息 */
	public void getRoleInfo() {
		System.out.println("角色名称:" + roleName + "\t武器:" + wuQi + "\t战斗力:" + zhanDouLi + "\t耐力:" + naiLi);
	}

	public static void main(String[] args) {
		/**
		 * 先new对象,再赋值
		 */
		// 创建一个孙悟空的角色: 类名 对象名 = new 构造器();
		// 孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力五颗星
		XiyoujiRole sunwukong = new XiyoujiRole();

		// 通过对象名.属性访问成员变量
		sunwukong.roleName = "孙悟空";
		sunwukong.wuQi = "金箍棒";
		sunwukong.zhanDouLi = "★★★★★";
		sunwukong.naiLi = "★★★★★";

		// 通过对象名.方法访问成员方法
		sunwukong.fight();
		sunwukong.getRoleInfo();

		/**
		 * new对象的同时,完成初始化操作
		 */
		// 唐 僧:唐僧没有武器,战斗力为零,耐力五颗星
		XiyoujiRole tangSeng = new XiyoujiRole("唐僧", "无", "☆☆☆☆☆", "★★★★★");
		tangSeng.getRoleInfo();

		// 猪八戒:猪八戒的武器是耙子,战斗力四颗星,耐力两颗星
		XiyoujiRole zhuBaJie = new XiyoujiRole("猪八戒", "耙子", "★★★★☆", "★★☆☆☆");
		zhuBaJie.getRoleInfo();

		// 沙 僧:沙僧的武器是月牙铲 ,战斗力三颗星,耐力四颗星
		XiyoujiRole shaSeng = new XiyoujiRole("沙 僧", "月牙铲", "★★★☆☆", "★★★★☆");
		shaSeng.getRoleInfo();

	}
}
package com.tencent.chapter06.lianxi;
/**
 * <p>Title: _04</p>  
 * <p>
 *    Description: 
 *    4、设计一个类Student,该类包括姓名、学号和成绩。设计一个方法,按照成绩从高到低的顺序输出姓名、学号和成绩信息。[必做题]
 * </p>  
 * @author xianxian 
 * @date 2023年1月4日
 */
public class _04 {
	/**
	 * <p>Title: main</p>  
	 * <p>
	 *    Description: 
	 * </p>  
	 * @param args
	 */
	public static void main(String[] args) {
		//学生:张三
		Student zhangsan = new Student();
		zhangsan.name = "张三";
		zhangsan.sno = "201909001";
		zhangsan.score = 77;
		
		//学生:李四
		Student lisi = new Student("李四", "201909002", 88);
		
		//学生:王五
		Student wangwu = new Student("王五", "201909003", 99);
		
		//打印学生的信息
		zhangsan.print();
		lisi.print();
		wangwu.print();
		
		//设计一个方法,按照成绩从高到低的顺序输出姓名、学号和成绩信息
		Student[] array = new Student[]{zhangsan,lisi,wangwu};
		
		//比较两次
		for (int i = 1; i < array.length; i++) {
			
			//每一次两两比较
			for (int j = 0; j < array.length - i; j++) {
				if(array[j].score < array[j+1].score)
				{
					Student temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
		
		//打印学生信息
		for (Student student : array) {
			student.print();
		}
	}
}
//设计一个类Student
class Student{
	
	//该类包括姓名、学号和成绩
	String name;
	String sno;
	double score;
	
	//无参构造函数
	public Student()
	{
		
	}
	//重载带参数的构造函数
	public Student(String name,String sno,double score)
	{
		this.name = name;
		this.sno = sno;
		this.score = score;
	}
	
	//输出学生的信息
	public void print()
	{
		System.out.println("姓名:" + name + "\t学号:" + sno + "\t成绩:" + score );
	}
}
package com.tencent.chapter06.lianxi;
/**
 * <p>Title: Point</p>  
 * <p>
 *    Description: 
 *     * 1、定义一个点类Point,
 *     包含2个成员变量x、y分别表示x和y坐标,
       2个构造器Point()和Point(int x0,int y0),
                      以及一个movePoint(int dx,int dy)方法实现点的位置移动,
           
                       创建两个Point对象p1、p2,分别调用movePoint方法后,打印p1和p2的坐标。[必作题]
 * </p>  
 * @author xianxian 
 * @date 2023年1月4日
 */
//定义一个点类Point
public class Point {
	//包含2个成员变量x、y分别表示x和y坐标
		int x;
		int y;
		
		//2个构造器Point()和Point(int x0,int y0)
		public Point()
		{
			
		}
		public Point(int x0,int y0)
		{
			x = x0;
			y = y0;
		}
		
		//以及一个movePoint(int dx,int dy)方法实现点的位置移动
		public void movePoint(int dx,int dy)
		{
			x = x + dx;
			y = y + dy;
		}
		
		//  创建两个Point对象p1、p2,分别调用movePoint方法后,打印p1和p2的坐标
		public static void main(String[] args) {
			//先new对象,再赋值
			Point p1 = new Point();
			p1.x = 10;
			p1.y = 20;
			p1.movePoint(5, 5);
			System.out.println(p1.x + "  " + p1.y);
			
			//new对象的同时赋值
			Point p2 = new Point(30, 40);
			p2.movePoint(-5, -5);
			System.out.println(p2.x + "  " + p2.y);
		}
}
package com.tencent.chapter06.thisguanjianzi;
/**
 * <p>Title: ThisKey</p>  
 * <p>
 *    Description: 
 *     * this关键字:
		1.代表对象自身的引用
		2.指向调用该方法的当前对象
		3.通常在类的方法定义中使用

         用this关键字的情况
		1.方法中的变量与成员变量重名
		2.在一个构造器中,调用其它重载的构造器,且必须放在第一行
		3.返回当前对象的引用
 * </p>  
 * @author xianxian 
 * @date 2023年1月4日
 */
public class ThisKey {
	//成员变量
		String name;
		String sex;
		
		//构造函数
		public ThisKey()
		{
			System.out.println("初始化系统的代码..............");
		}
		public ThisKey(String name)
		{
			//2.在一个构造器中,调用其它重载的构造器,且必须放在第一行
			this();
			
			//1.方法中的变量与成员变量重名
			this.name = name;
			//System.out.println("ThisKey(name):" + this);//33d063fd
		}
		public ThisKey(String name,String sex)
		{
			//2.在一个构造器中,调用其它重载的构造器,且必须放在第一行
			this(name);
			
			//this.name = name;
			this.sex = sex;
		}
		
		//成员方法
		public void setName(String name)
		{
			//1.方法中的变量与成员变量重名
			this.name = name;
			//System.out.println("setName:" + this);//33d063fd
		}
		
		//3.返回当前对象的引用
		public ThisKey getInstance()
		{
			return this;
		}
		
		public static void main(String[] args) {
			//ThisKey caixukun = new ThisKey("蔡徐坤");
			//caixukun.setName("球王蔡徐坤");
			//System.out.println("caixukun:" + caixukun);//33d063fd
			
			ThisKey fengTiMo = new ThisKey("冯提莫", "女");
			System.out.println(fengTiMo.name);
			System.out.println(fengTiMo.sex);
			
			//3.返回当前对象的引用
			ThisKey fengTiMoClone = fengTiMo.getInstance();
			System.out.println(fengTiMo);//33d063fd
			System.out.println(fengTiMoClone);//33d063fd
		}
}
package com.tencent.chapter06.threebianliang;
/**
 * <p>Title: Variables</p>  
 * <p>
 *    Description: 
 *     * Java中主要有3种类型的变量:
		1.静态变量[静态区]:在类中声明为static 的属性。	     -- 老大,无私共享
		2.实例变量[堆内存]:即类的属性,也是全局变量。                          -- 老二,相对自私,所有东西自己专有
		3.局部变量[栈内存]:定义在方法体中的变量;或是方法的形参。  -- 老三,一直跟着方法跑,方法被调用,老三在,方法调用完成,老三不见了
		
		栈stack:栈的存取速度比堆快,效率高。在栈内保存基本数据类型的局部变量和对象的引用值。
		
		堆heap:堆可以保存那些对空间要求较大的变量。如对象的属性和数组的元素。
 * </p>  
 * @author xianxian 
 * @date 2023年1月4日
 */
public class Variables {
	//1.静态变量:在类中声明为static 的属性
		//         属于类级别的变量,在类被加载的时候即保存在内存,只要类存在,静态变量就存在,属于共享变量
		static double pi = 3.1415926;
		
		//2.实例变量:即类的属性,也是全局变量.
		//         属于对象级别的变量,在new对象的时候存在内存当中,只要对象存在,实例变量就存在,属于对象专有的变量
		String username;
		
		//3.局部变量:定义在方法体中的变量str;或是方法的形参prefix。
		//        当方法被调用时,局部变量即保存在内存中,当方法执行结束,局部变量生命周期结束
		public void setUsername(String prefix)
		{
			String str = "球王";
			
			this.username = prefix + this.username;
		}
		
		/**
		 * 测试成员变量的默认值
		 * 			byte的默认值:0
					short的默认值:0
					int的默认值:0
					long的默认值:0
					
					float的默认值:0.0
					double的默认值:0.0
					
					char的默认值:---- ---

					boolean的默认值:false
					
					int[]的默认值:null
					Variables的默认值:null
		 */
		byte b;
		short s;
		int i;
		long l;
		float f;
		double d;
		char c;
		boolean bool;
		
		int[] array;
		Variables var;
		
		public void getDefaultValue()
		{
			System.out.println("byte的默认值:" + b + "\n"
					+ "short的默认值:" + s + "\n"
					+ "int的默认值:" + i + "\n"
					+ "long的默认值:" + l + "\n\n"
					
					+ "float的默认值:" + f + "\n"
					+ "double的默认值:" + d + "\n\n"
					
					+ "char的默认值:----" + c + "---\n\n"
					
					+ "boolean的默认值:" + bool + "\n\n"
					
					+ "int[]的默认值:" + array + "\n"
					+ "Variables的默认值:" + var + "\n"
			);
		}
		
		public static void main(String[] args) {
			//有名对象一
			Variables caixunkun = new Variables();
			caixunkun.username = "蔡徐坤";
			
			System.out.println("[蔡徐坤]:" + caixunkun.pi); //3.1415926
			System.out.println("[蔡徐坤]:" + caixunkun.username);//蔡徐坤
			
			//有名对象二
			Variables fengtimo = new Variables();
			fengtimo.pi = 3.14;
			fengtimo.username = "冯提莫";
			
			System.out.println("[冯提莫]:" + fengtimo.pi); //3.14
			System.out.println("[冯提莫]:" + fengtimo.username);//冯提莫
			
			System.out.println("[蔡徐坤]:" + caixunkun.pi); //3.14
			System.out.println("[蔡徐坤]:" + caixunkun.username);//蔡徐坤
			
			//局部变量
			fengtimo.setUsername("网红---");
			System.out.println(fengtimo.username);
			
			//匿名对象:不定义对象的句柄,直接调用对象的方法,适用于对象只需要使用一次的场景
			new Variables().setUsername("球王");
			
			//测试默认值
			caixunkun.getDefaultValue();
			
		}
}

分割线


相关信息

以上就是我关于 Java面向对象基础 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。

扩展知识

  1. Java垃圾回收机制

分割线


上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4