栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java第四章作业

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java第四章作业

第四章Java作业 1.对象与对象引用的区别是什么? 请举例说明
  • 对象:对象是对客观事物的抽象(是一个类的实例 ),就好比如一台电视机

  • 对象的引用: 当对象的声明被赋予特定的对象后,声明就被称为了引用

public class FighterPlane {
……
    public static void main(String[] args) {
    FighterPlane fp;//声明对象,但此时并不创建对象
    fp = new FighterPlane();//创建对象,此时fp被成为对象的引用,new FighterPlane 用于创建对象
    //上面两句可以合二为一 FighterPlane fp = new FighterPlane();
    }
}

attention: 一个对象引用变量均占据4字节空间;一个对象至少占据16字节,其中包含12字节的对象头信息。除此以外,还有实例数据,对齐填充字节。

2.对象作为参数传递的特点是什么?请举例说明

方法中的参数可以为基本数据类型,也可以是对象,他们有不同的特点。

  1. 基本数据类型作为参数在方法中的传递是值传递
public class ValuePass {
 public static void modify(int a) {
       a++; 
  }
  private static int a;
  public static void main(String [] args) {
      modify(a); 
      System.out.println(a);
  }
 
}
//结果 为0 
//在modify方法中的语句虽然是a 进行了自增,但是此时的a并非和main函数中传递过去的a为同一个a,所以主函数中的a还是默认值0
  1. 对象是 引用传递 ,当对象作为参数传递时,传递的是对象的地址。也就是说,对象只有一个。
class IntClass {
   int value;   
}   
public class RunIntClass {
   public static void modifyValue(IntClass s, int val){ 
        s.value = val; 
   } 
   public static void main(String[] args) { 
        IntClass  a = new IntClass();     
        modifyValue(a,8);
        System.out.println(a.value);  
   }
}
// 结果为:8
// 当对象作为实参时,会把对象的地址传递给方法中对的形参,此时实参和形参指向了同一块内存,当在方法中利用形参修改内存中的值后,方法一旦结束,形参就会被释放,但是实参指向的内存中的已经被修改,不会因为形参的释放而变回去。
3.对象初始化顺序是怎样的?请举例说明 创建对象时的初始化顺序:
  1. 系统会对数据成员进行默认初始化
  2. 执行数据成员定义处的初始化语句
  3. 调用构造方法为数据成员指定初值
class IntClass{
    int value;//自动初始化 默认值为0
   //int value=5; 在定义时指定初值
}
public IntClass(){}
public IntClass(){
    value=val;
}
public class IntClassConstructor{
//调用构造方法,从而省略了s.value代码
    public static IntClass getinstance(){
            IntClass s=new IntClass(8);
            // s.value = 8;
            return s;
        }
    public static void main(String args[]){
        IntClass a=new IntClass();
        System.out.println(a.value);
        a=getinstance();
        System.out.println(a.value);
    }
 
}
// 输出结果:
// 0
// 8
4.类的static字段与非static字段的区别是什么?什么场景应该使用static修饰符?请举例说明 static
  • 用static修饰符修饰的数据成员是不属于任何一个类的具体对象,而是属于类的静态数据成员。
  • 它被保存在类的内存区的公共存储单元中,而不是保存在某个对象的内存区中。因此,一个类的任何对象访问它时,存取到的都是相同的数值。
  • static方法是类方法,但可以被所有对象所访问,引用这个方法时,可以使用对象名做前缀,也可以使用类名做前缀
  • static方法内部的代码,只能访问类中的static属性或方法,不能直接访问类中的非static属性或方法(因为那是对象方法),但非static方法(对象方法)可以访问static数据成员
  • main方法是特殊的静态方法,是Application程序入口点
**非static **
  • 无static修饰的数据成员(方法)为一个类特有的数据成员(方法),对于任何一个类的实例,其值一般都是不同 的。
class Intclass {
		static int num = 1; //静态数据成员初始化
		int value = 5;//在定义时指定初值
		
		public Intclass(int val) {
			value = val;
		}
		//静态方法
		static int countNum() {
			return num;
		}
		
		public class IntClassContructor {
			public static IntClass getInstance() {
				IntClass s = new IntClass(8);
				return s;
			}
			public static void main(String[] args) {
				System.out.println(IntClass.countNum());
				IntClass a = new IntClass();// value 被初始化为5
				System.out.println(a.value);
				IntClass.num++;
				a = getInstance();
				a.num++;
				System.out.println(a.num);
			}
		}
		
	}
//输出结果:
// 1
// 5
// 3
5.Java中final修饰符都有什么作用?请举例说明
  • final修饰属性,则属性为常量
final int NUM = 20; 
 NUM = 30; // 编译错误
  • 如果修饰方法,则该方法在子类当中不能被覆盖(见多态一节),可防止任何继承类修改此方法,保证了程序的安全性和正确性
class Parent {
     public final void method1(){}//这个方法不能被子类覆盖    
} 
class Child extends Parent { 
     public final void method1(){…}//编译错误
}
  • final修饰类,则该类不能被继承
class Parent {}
final class Person extends Parent{
 } //可以继承Parent类        
class Child extends Person{
 } //编译报错,不能继承Person类
6.Java中float[10] arr; 语句正确么?为什么?

不正确
Java中的数组可以看作是一个对象,可以称为数组对象。 既然是对象,那么创建的时候就要用的 new 关键字。

  • 一维数组
    • 声明:类型标识符,数组名[] 或 类型标识符[],数组名

      • 例如:int [] abc ; String[] ex;MyClass[] mc; (也可以写成:int abc[]; String ex[];MyClass mc[]. 不过这种写法不常用。
    • 定义:类型标识符[],数组名 = new 类型标识符[数组长度] 或类型标识符,数组名[] = new 类型标识符[数组长度]
      -例如:int[] abc = new int[10]; (或者 int abc [] = new int[10])

    • 初始化:

      • 直接在声明的时候进行初始化
      • 例如:String [] s = {“ab”,“bc”,“cd”}; int[] a = {3,4,5,6};

      也可以采用以下方式定义及初始化
      float f4[] = new float[] {1.0f,2.0f,3.0f};

  • 二维数组
    • 声明: 类型说明符 数组名[ ][ ]; 或 类型说明符[ ][ ] 数组名;
    • 例如: int arr[ ][ ] 或 int [ ][ ] arr;
    • 初始化:
      • 使用关键字new
        数组名=new 类型说明符[数组长度][ ];
        数组名=new 类型说明符[数组长度][ 数组长度]
        例如: int arra[][]; arra=new int[3][4]
      • 是用指定的初值对数组初始化
        例如: int[][] arr1={{3,-9,6},{8,0,1},{11,9,8}}
7.Java数组元素类型为基本类型和引用类型时,有什么不同?请举例说明
  • 基本数据类型: 数组元素的值直接存储在对应的数组元素中,因此,初始化数组时,先为该数组分配内存空间,然后讲数组元素的值存入对应数组元素中。
    例如:
int [] a = {1,2,3,,4,5}'
  • 引用数据类型: 每个数组元素里存放的还是引用,他指向另一块内存,这块内存里存储了想用的数据;
    例如:
MyClass[] mc = new MyClass[10];
// 未初始化之前全是 null
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/299016.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号