当前位置: 首页 > news >正文

永久免费网站推荐网页制作工作网站

永久免费网站推荐,网页制作工作网站,网站设计两边为什么要留白,网站设计优缺点1. Java数组是静态的Java是静态语言#xff0c;所以Java的数组也是静态的#xff0c;即#xff1a;数组被初始化后#xff0c;长度不可变静态初始化#xff1a;显式指定每个数组元素的初始值#xff0c;系统决定数组长度String[] books new String[]{疯狂Java讲义…1. Java数组是静态的Java是静态语言所以Java的数组也是静态的即数组被初始化后长度不可变静态初始化显式指定每个数组元素的初始值系统决定数组长度String[] books new String[]{疯狂Java讲义,Thinking in Java,Java核心技术卷};String[] names new String[]{张三,李四,王五,赵六};动态初始化显式指定数组的长度系统决定每个数组元素的初始值String[] strArr new String[5];以上两种初始化的内存使用情况如图所示动态初始化数组由系统决定每个数组元素的初始值遵循以下规则byte、short、int、long类型的数组的初始值为0float、double类型的数组的初始值为0.0char类型的数组的初始值为\u0000表现为空字符但要占位boolean类型的数组的初始值为false引用类型的数组的初始值为null一旦数组初始化完成则长度不可改变以下代码造成了数组初始化后长度可改变的假象books names;strArr books;System.out.println(books.length); // 4System.out.println(strArr.length); // 4Java的数组变量是一种引用类型的变量数组变量并不是数组本身它只是指向堆内存中的数组对象改变一个数组变量所引用的数组可以造成数组长度可变的假象。上述代码让books数组变量和strArr数组变量都指向了names数组变量引用的数组这样做的结果就是让三个数组变量都引用了相同的数组对象。内存图如下而原来strArr和books引用的数组对象的长度不会改变由于已经没有变量引用它们它们成为垃圾等待垃圾回收机制来回收。此时程序使用strArr、books、和names这三个变量时将会访问同一个数组对象。JavaScript是动态语言其数组的长度可以改变var arr [];document.write(arr的长度为 arr.length ); // 0arr[0] 1;document.write(arr的长度为 arr.length); // 12. 数组一定要初始化吗实际上懂得了Java数组的内存机制后我们可以说数组不是必须初始化或者说数组初始化不仅有之前介绍的两种方法可以完全换一种方法int[] nums new int[]{1, 2, 3, 4, 5};int[] arr;arr nums;对于数组对象来说必须初始化也就是为该数组对象分配一块连续的内存空间连续内存空间的长度就是数组对象的长度。对于数组变量来说不需要进行初始化只需让其指向一个有效的数组对象就可以。实际上所有引用类型的变量其变量本身不需要任何初始化需要初始化的是它所引用的对象。3. 基本类型数组的初始化程序直接先为数组分配内存空间再将数组元素的值存入对应的内存中。int nums; ①System.out.println(nums); ②nums new int[]{1, 2, 3, 4}; ③System.out.println(nums.length); ④我们来分析①-④步的内存① 定义nums数组变量后的存储示意图如下对于②行代码来说没有任何问题虽然nums变量并未引用到有效的数组对象但此时并未通过nums变量访问数组对象的方法或属性所以没有问题。③ 静态初始化nums数组后的存储示意图如下对于④行代码来说此时访问了nums数组对象的属性所以要求nums必须引用一个有效的对象。当通过引用变量来访问实例属性或者调用非静态方法时如果该引用变量还未指向有效的对象程序就会抛出运行时异常NullPointerException例如第二行代码如果为System.out.println(nums.length);就会抛出NullPointerException误区基本类型的数据的值存储在栈内存中实际上应该是所有的局部变量都保存在栈内存中不管是基本类型还是引用类型局部变量都保存在各自的方法栈中。4. 引用类型数组的初始化引用类型数组的数组元素仍然是引用类型因此数组元素里存储的还是引用它指向另一块内存这块内存里存储了该引用变量所引用的对象包括数组和Java对象。下面程序的执行代表了引用类型数组初始化的典型过程class Person{String name;int age;public void info(){System.out.println(name name , age age);}}// 创建两个Person对象Person p1 new Person();p1.name 张三;p1.age 20;Person p2 new Person();p2.name 李四;p2.age 30;// 将两个Person对象赋给数组元素person[0] p1;person[1] p2;// 结果一样p1和person[0]指向同一个对象p1.info();person[0].info();分析内存5. 数组元素就是变量当数组引用变量指向一个有效的数组对象之后程序就可以通过该数组变量访问数组对象。Java语言不允许直接访问堆内存中的对象因此无法直接访问堆内存中的数组对象程序将通过数组引用变量来访问数组对象。Java语言避免直接访问堆内存可以使程序更加健壮如果程序直接访问并修改堆内存中的数据可能破坏内存的数据完整性从而导致程序Crash。无论哪种类型的数组其数组元素其实相当于一个普通变量。下面程序师范了将数组元素和普通变量相互赋值的情形class Cat{String name;double height;public Cat(String name, double height){this.name name;this.height height;}public void info(){System.out.println(name name , height height);}}public class TestArray {public static void main(String[] args) {int[] a new int[5];for(int i0; ia[i] i;}int x a[0];int y 99;a[4] 99;Cat[] cats new Cat[2];cats[0] new Cat(咪咪, 10.0);cats[1] new Cat(卡卡, 12.2);Cat c1 cats[0];Cat c2 new Cat(豆豆, 11.1);cats[1] c2;}}内存分析6. 没有多维数组所谓多维数组其实只是数组元素元素依然是数组的数组1维数组的数组元素的基本类型或者引用类型2维数组的数组元素是1维数组3维数组的数组元素是2维数组...N维数组的数组元素是N-1维数组。Java允许将多维数组当成1维数组来处理初始化多维数组时可以先初始化最左边的维数此时该数组的每个数组元素都相当于一个数组引用变量这些数组还需要进一步初始化。如下程序示范了多维数组的用法public static void main(String[] args) {int[][] a;a new int[4][];// 把a当成一维数组遍历a数组的每个数组元素for(int i0; iSystem.out.println(a[i]); // 输出都为null}a[0] new int[2];a[0][1] 2;for(int i0; iSystem.out.println(a[0][i]); // 输出0和2}}内存分析说明一般我们认为通过数组的length属性可以获取数组的长度其实这个说法不够准确例如数组a它是一个传统的“二维数组”它的长度好像定义不是很明确其实数组的长度指的是数组所分配的连续内存空间的长度所以说a数组的长度为4.我们用一个“极端”的程序来更好的理解数组在内存中的分配机制public static void main(String[] args) {Object[] objArr1 new Object[3];objArr1[1] new Object[2];Object[] objArr2 (Object[]) objArr1[1];objArr2[1] new Object[3];Object[] objArr3 (Object[]) objArr2[1];objArr3[1] new int[5];int[] iArr (int[]) objArr3[1];for(int i0; iiArr[i] i;}}内存分析此时的objArr1不再是一个简单的一维数组它是一个四维数组。最后我们执行如下语句System.out.println(((int[])((Object[])((Object[])objArr1[1])[1])[1])[2]);通过以上内存分析不难得出结果为3.通过上面的分析不难得出多维数组的本质仍然是一维数组。因为Java是强类型语言所以上诉代码需要多次强制类型转化如果用弱类型语言实现会简单很多比如用JavaScript实现var objArr1 [];objArr1[1] [];var objArr2 objArr1[1];objArr2[1] [];var objArr3 objArr2[1];objArr3[1] [];var iArr objArr3[1];for(var i0; i5; i){iArr[i] i;}document.write(objArr1[1][1][1][2]);
http://www.zqtcl.cn/news/548519/

相关文章:

  • 网站建设项目职责营销型网站建设五大内容
  • 建设工程监理招标网站W做网站
  • 网站建设与维护教学课件网站上线前做环境部署
  • 信誉好的网站建设做网站成为首富的外国人
  • 常州网站制作市场湖北省荆门市城乡建设网站
  • 泉州网站制作运营商专业北京软件公司招聘信息查询
  • 车床加工东莞网站建设网站建设教学改进
  • 深圳专业做网站建设西安网站建设有限公司
  • wordpress 一键建站wordpress子主题style
  • 昆明设计网站怎么做网络广告
  • 2018什么做网站深圳企业网站设
  • 北京旅游外贸网站建设博客集成wordpress
  • 中国最好的建设网站哪些网站教你做系统
  • 自己做网站别人怎么看见网站建设办公
  • 凡科做网站视频网站哪家好
  • 查询网站是否正规营销策略国内外文献综述
  • 做网页用的网站wordpress用户角色权限管理
  • 怎么查网站备案的公司wordpress 无刷新评论
  • 学前心理学课程建设网站百度极速版下载
  • 佛山做营销型网站建设深圳宝安区租房
  • 做汽车团购的网站建设营销方案有哪些
  • 做设计的网站网络公关什么意思
  • 一般课程网站要怎么做做钓鱼网站软件下载
  • 济南网站建设92jzh收不到wordpress的邮件
  • 一键优化在哪里打开新手怎么入行seo
  • 网站建设的费用明细创建公司网站需要注意什么
  • 微网站怎么做的好宣传片拍摄服务
  • 抚州网站开发机构wordpress开源
  • 企业营销网站建设不属于网页制作工具
  • 呼和浩特网站建设信息建服装类网站需要考虑的因素