精华内容
下载资源
问答
  • 常规的给类对象数组是无法定义事件的,这个例子给了一些参考。
  • java中通过键盘输入来实例化类对象数组,同时对类对象排序,希望初学java的同学们可以下载下学习下
  • Java类对象数组的赋值问题

    千次阅读 2020-04-03 22:43:58
    类对象数组在应用是可能会忽略再次实例化对象的一个过程, 下面是代码: Student[] student = new Student[5]; for(int i = 0; i < 5; i++) { student[i] = new Student(); //此行即是重点 !!! student[i].set...
    类对象数组在应用是可能会忽略再次实例化对象的一个过程, 下面是代码:
    Student[] student = new Student[5];
    for(int i = 0; i < 5; i++) {
    	student[i] = new Student(); 	//此行即是重点 !!!
    	student[i].setName(textName.getText());
    	student[i].setAge(textAge.getText().trim());
    }
    
    一定要再new一次, 为什么呢? 看下面这张图:

    在这里插入图片描述

    1. 定义了一个类数组后,系统只是分配了一个引用空间,并没有实际分配内存空间给数组中的元素,因此类数组中的元素还是需要使用new运算符来实例化.
    2. 在声明了自定义类的数组之后,对每一个数组元素的初始化,都要为其new一个对象出来使得指针指向该对象,Java语言本身是不提供在自定义类数组声明时候自动创建新对象的方式的.
    3. 相当于c语言里指针变量本身占的空间和指针所指向的变量所占的空间, 也可以理解为二维数组.
    展开全文
  • 前言 1255: 打怪升级(Java),写这个题目程序的时候,控制台提示如下错误: Exception in thread "main" java.lang....然后我调试才发现,这个对象数组居然是null的,这我就不理解了,我明明写

    前言

    1255: 打怪升级(Java),写这个题目程序的时候,控制台提示如下错误:

    Exception in thread "main" java.lang.NullPointerException
    	at oj1255.Main.input(Main.java:41)
    	at oj1255.Main.<init>(Main.java:24)
    	at oj1255.Main.main(Main.java:52)
    

    然后我调试才发现,这个对象数组居然是null的,这我就不理解了,我明明写了new的……


    于是就有了这篇博客。为了突出重点,就重新写了个类,因此直接看下面的即可,不用管前言。

    参考

    跳币上山岭的博客

    示例

    package error.inner;
    
    public class Outer {					// 外部类
    	private class Inner {				// 内部类
    		public int x;					// 内部类属性
    	}
    	
    	private Inner[] test;				// 内部类对象数组
    	
    	public Outer() {					// 外部类构造方法
    		test = new Inner[2];			// 创建内部类对象数组
    		for(int i = 0; i < 2; i++) {
    			test[i].x = i;				// 赋值
    		}
    		for(int i = 0; i < 2; i++) {	// 输出内部类属性值
    			System.out.println(test[i].x);
    		}
    	}
    	
    	public static void main(String[] args) {
    		new Outer();
    	}
    }
    

    乍一看,你可能会觉得这段代码没有任何问题,然而事实是在控制台丢一个Exception给你:

    Exception in thread "main" java.lang.NullPointerException
    	at error.inner.Outer.<init>(Outer.java:13)
    	at error.inner.Outer.main(Outer.java:21)
    

    报错在第13行test[i].x = i;,于是进入了Debug模式

    error.inner
    从红色箭头那一行,我们看到test[0]null的,到这里应该都明白了。
    我们在第11行test = new Inner[2]的代码实际上只是申请的对象数组的大小,如下图所示:

    内存图

    堆内存里面并没有Inner的实例,因此我们需要加1行代码(第4行)即可:

    	public Outer() { 					// 外部类构造方法
    		test = new Inner[2]; 			// 创建内部类对象数组
    		for (int i = 0; i < 2; i++) {
    			test[i] = new Inner();		// 创建对象
    			test[i].x = i; 				// 赋值
    		}
    		for (int i = 0; i < 2; i++) { 	// 输出内部类属性值
    			System.out.println(test[i].x);
    		}
    	}
    

    其他代码都不用改,这样一来,堆中就变成了这样:

    内存图

    到这里再运行程序,就能正常输出想要的东西了:
    结果

    小结

    类的实例数组,每一个都需要单独创建。切记!切记!


    展开全文
  • C++ 类对象数组

    万次阅读 2014-02-28 22:11:05
    对象数组是指一个数组元素都是对象的数组 创建对象数组的时候只能调用默认构造函数初始化对象

    对象数组是指一个数组元素都是对象的数组

    创建对象数组的时候只能调用默认构造函数初始化对象

    #include<iostream>
    using namespace std;
    
    class MyClass
    {
    	int value;
    public:
    	MyClass(int i){value=i;}
    	MyClass(){value=0;}
    	int getvalue(){return value;}
    	void setvalue(int v){value=v;}
    };
    
    int main()
    {
    	MyClass a[10]={0,1,2,3,4,5,6,7,8,9},b[10];
    	cout<<"输出a: "<<endl;
    	for(int i=0;i<10;i++)
    	{
    		cout<<"a["<<i<<"]="<<a[i].getvalue()<<" ";
    		if((i+1)%5 == 0)
    			cout<<endl;
    	}
    	cout<<"输出b: "<<endl;
    	for(i=0;i<10;i++)
    	{
    		cout<<"b["<<i<<"]="<<b[i].getvalue()<<" ";
    		if((i+1)%5 == 0)
    			cout<<endl;
    	}
    	return 0;
    }



    展开全文
  • 带参构造函数的类对象数组初始化

    千次阅读 2015-01-07 18:47:01
    带参构造函数的类对象数组初始化

    今天同学问我个问题:有一个带参构造函数的类,如何初始化其对象数组?仔细想了想,应该不难额,比如:

    #include <iostream>  
    using namespace  std;  
    
    class A {
    public:
    	A(int a)
    	{cout << "construct" << a << endl;}
    };
    
    int main()  
    {  
    	A arr[] = {A(1), A(2), A(3), A(4), A(5)};
    	return 0;  
    }  
    但是问题来了,如果数组长度太大怎么办?想了一下,目前所知道的有两种比较好的办法:

    (1)使用STL容器vector来代替静态数组:

    #include <iostream> 
    #include <vector> 
    
    class A {
    public:
    	A(int a)
    	{cout << "construct" << a << endl;}
    };
    
    int main()  
    {  
    	vector<A> va;
    	for(int i = 0; i < 50; i++)
    		va.push_back(A(i));
    	return 0;  
    }  
    但这里每次push_back时除了调用A的构造函数外还会调用A的拷贝构造函数,而且在数组大小动态增长的过程中,由于动态申请内存可能导致数据的搬移也会再次调用A的拷贝构造函数,这样效率比较低下。

    (2)利用operator new + 动态内存处理:

    #include <iostream> 
    using namespace  std;  
    
    class A {
    public:
    	A(int a)
    	{cout << "construct" << a << endl;}
    	~A()
    	{cout << "~A()\n";}
    };
    
    int main()  
    {  
    	A *pa = reinterpret_cast<A *>(::operator new(sizeof(A) * 50));
    	for(int i = 0; i < 50; i++)
    		new(&pa[i]) A(i);
    	for(int i = 0; i < 50; i++)
    		pa[i].~A();
    	delete pa;
    	return 0;  
    }  
    
    不过,这里要注意自行调用A的析构函数,而且这里申请的内存虽然用于数组,但operator new仅申请内存,并未存放数组长度等信息,不能由delete []的形式释放。



    展开全文
  • C++类对象数组初始化

    千次阅读 2012-12-09 11:05:51
    原文地址:... 类对象数组初始化   如有一个如下类: class EquipmentPiece { private: int IDNumber; public: EquipmentPiece(int IDNumber) : IDNumbe
  • 类对象数组初始化(三种方法)

    万次阅读 2013-09-13 21:11:47
    参考自《More Effective ... 类对象数组初始化参考自《More Effective C++中文版》  类对象数组初始化  如有一个如下类:  class EquipmentPiece {  private:  int IDNumber;  public:  Equipm
  • java类对象数组返回值

    2016-12-23 01:56:12
    public class bank { private int numberOfCustomers[];...当我用test类对象返回值的时候 给我的值是这样的 bank.Customer@78aea5cd bank.Customer@78aea5cd null null null null 这个值是怎么回事
  • C++ 类对象数组初始化

    万次阅读 2018-11-02 21:13:24
    如何给中定义了带有参数的构造函数的对象数组赋值 class A { public: A(){}//无参构造函数0 A(int i){}//有参构造函数1 A(int i,int j){}//有参构造函数2 }; int main() { A a,b[5];//调用6次无参构造函数...
  • 1.获取某个的成员,返回数组 2.获取数组元素,返回一个对象
  • c++类对象数组初始化的几种方法

    万次阅读 2011-04-22 15:46:00
     类对象数组初始化  如有一个如下类:  class EquipmentPiece {  private:  int IDNumber;  public:  EquipmentPiece(int IDNumber) : IDNumber(IDNumber) {};  }...
  • 今天在一个群里看到一位...所以基类指针自增的移动距离只能是基类对象的长度,但是基类对象和派生类对象的长度往往是不同的,那么如果使用基类指针自增的方式遍历派生类数组就会产生未定义的行为。 2.使用虚函数...
  • 关于JAVA类对象数组的创建

    千次阅读 2014-06-30 10:10:35
    但创建类对象时并不涉及常量池,而是直接使用new调用构造函数在堆内存中开辟内存空间进行存储的,所以每次创建新对象都需要使用new,对象数组依然。故,创建数组对象可以使用下面语句: M[] m = {new M(),new M(...
  • 我有个抽象Animal,Cat和Duck继承了Animal,我希望创建一个Animal类型的数组,这样我就可以animal[0]=new Cat();animal[1]=new Duck();我的代码是这样的: ``` public abstract class Animal {...
  • 如何实现自定义类对象数组的排序

    千次阅读 2009-07-31 09:04:00
    我想熟悉Arrays.sort()方法的朋友,无疑肯定是掌握了如何对基本类型的数组进行排如序,而在这里,我想说一下,如何对自定义类对象数组进行排序?例如,我定义一个Student类,拥有两个属性,即姓名(String name...
  • Java类对象数组声明和初始化

    千次阅读 2014-10-02 11:30:14
    Java是纯面向对象语言。是其重要构成单位。然后,在实际编程中,我们会自定义一些,如Point public class Point { public Point(){ Lat=0.0; Lng=0.0; } public double GetLat(){ return Lat; } ...
  • class Student{ public: string x; }; 我怎么按由大到小的顺序排序啊? sort没用的说,求大神详细代码!
  • 代码: •••• g_nPersonCount=5; vector<CRower> g_...按以下输入格式:类对象数组名._First[0].类成员变量名._First,6   由于只添加了3.78、11.28、14.38三个值,因此后面的都为无效值。
  • C++对象数组

    万次阅读 多人点赞 2018-05-14 23:47:15
    //有10个元素的学生类对象数组 2:对象数组的访问形式:数组名[下标].成员名; Eg: asa[j].print(); 3:对象数组的初始化:对象数组的初始化通常也是由构造函数来完成的。 Eg: #include”student.h” int main ...
  • java对象数组 创建对象数组,初始化对象数组

    万次阅读 多人点赞 2019-07-30 16:34:15
    当需要一个的多个对象时,应该用该对象数组来表示,通过改变下标值就可以访问到不同的对象。 对象数组的定义和使用: 对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。 对象数组的声明形式...
  • 数组里面有一个私有数据成员,用它来排序数组。是不是要重载sort()函数???怎样在Arrays外面重载sort()函数??
  • 对象数组类

    2008-02-19 11:05:53
    一个对象数组类!功能齐全,扩大了数组功能,快速开发的好助手!
  • 对象数组

    2019-06-26 17:21:09
    对象数组 ...名称[] 对象数组名 = new 名称[3]; 对象数组名[0] = 对象; 对象数组名[1] = 对象; 对象数组名[2] = 对象; 静态初始化 名称[] 对象数组名 = new 名称[] {对象, 对象, 对象}; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,201,747
精华内容 480,698
关键字:

类对象数组