2019寒假java作业

面向对象(一)综合作业

基础知识:

  1. 常量的概念,常量有哪几种?编写程序测试。
  • 常量的概念:所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。

  • 常量名一般使用大写字符。

  • 程序中使用常量可以提高代码的可维护性。例如,在项目开发时,我们需要指定用户的性别,此时可以定义一个常量 SEX,赋值为 “男”,在需要指定用户性别的地方直接调用此常量即可,避免了由于用户的不规范赋值导致程序出错的情况。

  • java中常量的分类: 整数常量、 小数常量 、布尔常量、字符常量、字符串常量、null常量

    package homework01;
    
    public class Constant {
    
    	public static void main(String[] args) {
    		// final 常量名=值;
    		final double PI=3.14;
    		final String LOVE="family";
    		
    		System.out.println(PI);
    		System.out.println(LOVE);
    	}
    
    }
    
  1. 变量的本质是什么?编写代码测试。
  • 变量的本质:一个变量代表了计算机内存中的一个存储单元,对于这个变量的访问(驱逐和赋值)就是对这个变量所代表存储单元的访问。

    package homework01;
    		
    		public class variables {
    			public static void main(String[] args) {
    				//在JAVA中我们通过三个元素来描述变量:变量类型,变量名以及变量值。
    				String love="family";
    				System.out.println(love);
    				//变量类型 变量名 值(其中String具有不可变性,重新赋值后会生成新的String对象,love变量名这实际是指向对象地址的引用,"family"为具体的值)。
    				love="I love my family"; //变量重新赋值,重新指向了一个新的对象,对象值为"i love my family"。
    				System.out.println(love);
    			}
    		}
    
      	运行结果:	
      	    family
      	    I love my family
    
  1. 方法调用的本质是什么?编写代码测试。
  • 方法调用的本质:把实参的值赋给形参,实参和形参占有不同的存储单元,被调用方法执行完以后要返回它被调用的位置,程序继续往下执行。
    		package homework01;
    		
    		public class MethodInvocation {
    			public static void main(String[] args) {
    				int sum=sum(10,20);
    				System.out.println(sum);
    			}
    			public static int sum(int a ,int b) {
    				return a+b;
    			}
    		}
    		```
    
  1. 什么是数组?请举例说明。

    package homework01;
    
    public class array {
    	public static void main(String[] args) {
    		//声明数组 语法: 数据类型[ ] 数组名; 或者 数据类型 数组名[ ];
    		int[] scores;
    		String student[];
    		//分配空间,简单地说,就是指定数组中最多可存储多少个元素
    		//语法: 数组名 = new 数据类型 [ 数组长度 ];其中,数组长度就是数组中能存放元素的个数
    		student = new String[5];
    		//我们也可以将上面的两个步骤合并,在声明数组的同时为它分配空间,
    		String[] names = new String[5];
    		//赋值,数组中元素都是通过下标来访问的,例如向names中加入学生姓名
    		names[0] = "张三";
    		names[1] = "李四";
    		//也可以将声明数组、分配空间和赋值合并完成
    		int[] id = {79,91,84,68};//创建一个长度为4的整型数组
    		//它等价于
    		int[] ids = new int[]{78,91,84,68};//第二个方括号内必须为空,不能指定长度
    	}
    }
    
  2. 方法的重载(overload)编写代码测试。

  • 假设要在程序中实现一个对数字求和的方法,由于参与求和数字的个数和类型都不确定,因此要针对不同的情况去设计不同的方法。程序需要针对每一种求和的情况都定义一个方法,如果每个方法的名称都不同,在调用时就很难分清哪种情况该调用哪种方法。为了解决这个问题,java允许在一个程序中定义多个名称相同的方法,但是参数类型或参数个数必须不同,这就是方法的重载.

    	package homework01;
    	
    	public class OverLoad {
    		public static void main(String[] args) {
    			//下面是针对求和方法的调用
    			int sum1 = add(10,20);
    			float sum2 = add(1.23f,0.6f);
    			int sum3 = add(2,4,5,6);
    			//打印求和结果
    			System.out.println(sum1+" "+sum2+" " +sum3);
    		}
    		//下面方法实现四个整数相加
    		private static int add(int i, int j, int k, int l) {
    			return i+j+k+l;
    		}
    		//下面方法实现了两个小数相加
    		private static float add(float f, float g) {
    			return f+g;
    		}
    		//下面方法实现了两个整数相加
    		public static int add (int a,int b ) {
    			return a+b;
    		}
    	}
    	```
    
    
  1. 构造方法的重载编写代码测试。
  • 构造方法名称与类名相同且没有返回值不能定义为void

    package homework01;
    
    public class MethondOverLoad {
    	//在创建对象的时候,对象成员可以由构造函数方法进行初始化。 
    	//构造方法的方法名必须与类名一样。 
    	// 构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
    	//构造方法的作用是完成对象的初始化工作,他能够把定义对象时的参数传递给对象的域。
    	//构造方法不能由编程人员调用,而要系统调用。
    	// 构造方法可以重载,以参数的个数,类型,或排序顺序区分。
    	String phone;
    	float screen;
    	float cpu;
    	
    	public MethondOverLoad() {
    		super();
    	}
    	public MethondOverLoad(String phone, float screen, float cpu) {
    		super();
    		this.phone = phone;
    		this.screen = screen;
    		this.cpu = cpu;
    	}	
    	
    }
    
    
  1. 请举例说明什么是成员变量和局部变量,什么是变量的作用域。
  • 成员变量:在类的定义中,用来描述对象将要有什么。

  • 局部变量:在类的方法中定义,在方法中临时保存数据。

  • 成员变量和局部变量区别:

    1. 作用域不同:局部变量的作用域仅限于定义它的方法;成员变量的作用域在整个类内部都是可见的
    2. 初始值不同:Java会给成员变量一个初始值Java不会给局部变量赋予初始值
    3. 在同一个方法中,不允许有同名局部变量;在不同的方法中,可以有同名局部变量
    4. 两类变量同名时,局部变量具有更高的优先级
    package homework01;
    
    public class person {
    	//成员变量
    	 String name;
    	 char sex;
    	 int age;
    	 public void eat(){
    		 //局部变量
    		 int num = 10;//不进行赋值是在方法体内不能用的  编译的时候就会报错 尚未初始化变量
    	     System.out.println(num+"吃");
    	    }
    	 public void sleep(){
    	    System.out.println("睡觉");
    	    }
    
    }
    
    
  1. Java中的封装是如何实现的?封装的目的是什么?编写代码测试。
  • 概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

  • 好处

    1. 只能通过规定的方法访问数据
    2. 隐藏类的实例细节,方便修改和实现
  • 封装的实现(如图)
    在这里插入图片描述

    package com.imooc;
    
    public class Telphonetest {
    	private float screen;
    	private float cpu;
    	private float mem;
    	
    	//通过get 与  set 方法获取private的变量值
    	public float getScreen() {
    		return screen;
    	}
    	public void setScreen(float newScreen) {
    		screen=newScreen;
    	}
    	
    	public Telphonetest() {
    		System.out.println("无参的构造方法执行了!");
    	}
    	public Telphonetest(float newScreen,float newCpu,float newMem) {
    		screen = newScreen;
    		cpu = newCpu;
    		mem = newMem;
    		System.out.println("有参的构造方法执行了");
    	}
    }
    
    package com.imooc;
    
    public class Telphone {
    	
    	public static void main(String[] args) {
    		//通过无参的构造方法可以创建对象
    		Telphonetest phone = new Telphonetest();
    		//通过有参的构造方法也可以创建对象,并给对象中的实例变量赋初值
    		Telphonetest phone2 = new Telphonetest(5.0f,1.4f,2.0f);
    		//phone2.cpu=6.0f;当不是private类型变量,可以直接修改
    		phone2.setScreen(6.0f);//private类型的变量需要通过set或get方法
    		System.out.println("screen:"+phone2.getScreen());
    		
    	}
    }
    

    运行结果:

    无参的构造方法执行了!
    有参的构造方法执行了
    screen:6.0
    
  1. 请举例说明this关键字的作用(访问成员变量,调用方法,调用构造方法)
  • this关键字主要有三个应用:

    1. this调用本类中的属性,也就是类中的成员变量;
    2. this调用本类中的其他方法;
    3. this调用本类中的其他构造方法,调用时要放在构造方法的首行。
    //第一种应用,访问成员变量
    Public Class Student { 
     String name; //定义一个成员变量name
     private void SetName(String name) { //定义一个参数(局部变量)name
      this.name=name; //将局部变量的值传递给成员变量
     }
    }
    
    //第二种应用,调用本类中的其他构造方法
    class Person{  // 定义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 ;// 为类中的age属性赋值
     }
     public String getInfo(){ // 取得信息的方法
      return "姓名:" + name + ",年龄:" + age ;
     }
    };
    public class ThisDemo06{
     public static void main(String args[]){
      Person per1 = new Person("张三",33) ; // 调用构造实例化对象
      System.out.println(per1.getInfo()) ; // 取得信息
     }
    };
    
    //第三种应用,调用本类中的其他方法
    class Person{
    	private String name;
    	private int age;
    	public Person() {
    	}
    	public Person(String name,int a) {
    		this.name=name;
    		this.age=age;
    		this.print();//调用本类方法
    	}
    	public void print() {
    		System.out.println("*********************");
    	}
    	public String getInfo() {
    		return "姓名: "+this.name+"  年龄:"+this.age;
    	}
    }
    public class StringDemo {
    public static void main(String args[]) {
    	System.out.println(new Person("张三",20).getInfo());
    }
    }
    结果//*********************
    姓名: 张三  年龄:0
    
  1. static关键字的作用(修饰成员变量,修饰方法)编码测试
  • Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~

  • 使用 static 可以修饰变量、方法和代码块。

    package com.imooc;
    
    public class Hello {
    	//使用static关键字声明静态方法
    	public static void print() {
    		System.out.println("欢迎光临!");
    	}
    	public static void main(String[] args) {
    		//直接使用类名调用静态方法
    		Hello.print();
    		
    		//也可以通过对象名调用,当然更推荐使用类名调用的方式
    		Hello demo=new Hello();
    		demo.print();
    	}
    }
    
    
  • 注意:静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如:

    package com.imooc;
    
    public class Mooc {
    	String name = "爱慕课";//非静态变量name
    	static String hobby = "imooc";//静态变量hobby
    	
    	//在静态方法中调用非静态变量
    	public static void print() {
    		System.out.println(hobby);//可以调用静态变量
    		System.out.println(name);//错误,不可调用非静态变量
    	}
    }
    
  • 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。
    在普通成员方法中,则可以直接访问同类的非静态变量和静态变量。
    静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。

  1. 内部类的概念,编写代码测试成员内部类。

    问:什么是内部类呢?

    答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

    问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!!

    答:内部类的主要作用如下:

    a. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

    b. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

    c. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

    问:内部类有几种呢?

    答:内部类可分为以下几种:

    	成员内部类
    	静态内部类
    	方法内部类
    	匿名内部类
    
  • 内部类中最常见的就是成员内部类,也称为普通内部类。我们来看如下代码:

    package com.imooc;
    
    public class Outer {
    	private int a = 99;//外部类的私有属性
    	//内部类Inner
    	public class Inner{
    		int b = 2;//内部类的成员属性
    		public void test() {
    			System.out.println("访问外部类的a:" + a);
    			System.out.println("访问内部类的b:" + b);
    		}
    	}
    
    	//测试成员内部类
    	public static void main(String[] args) {
    		Outer o = new Outer();//创建外部类对象,对象名为o
    		Inner i = o.new Inner();//使用外部类对象创建内部类对象,对象名为i
    		i.test();//调用内部类对象的test方法
    	}
    }
    
    
    

    从上面的代码中我们可以看到,成员内部类的使用方法:

    a、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等

    b、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

    c、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

    d、 编译上面的程序后,会发现产生了两个 .class 文件
    在这里插入图片描述
    其中,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class

    另外,友情提示哦:

    a. 外部类是不能直接使用内部类的成员和方法滴
    可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

    b. 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。如:
    在这里插入图片描述

面向对象的内存分析:
参考com.huaxin.task01中的代码及006_案例01内存分析_02.png图片,自己执行代码画图。(此图很重要)

作业要求:所有代码在eclipse中测试通过,敲三遍,手写一遍,开学检查。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值