java程序员从笨鸟到菜鸟之回顾练习
2017-11-07 22:14
225 查看
练习1 在1-20之间生成10个不同的随机数
测试类
练习3
package 测试; //快速导入--shift+ctrl+o import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /* * 题目2: * 获取10个1-20之间的随机数,要求不能重复(flag标志位?) * 分析: * 1---Math类的random生成随机数[0.0,1.0) * 2---集合(保存元素)----equals()判断是否相等 * 3---size()集合个数---10 * 4---toArray---? * 5---由于目前只学了ArrayList(用此类) * 6---listIterator迭代器遍历 * * * 问题来了----集合嵌套概念(下回分解) * */ public class MathDemoRandom { public static void main(String[] args) { //从集合的角度去实现,Integer类(valueOf或parseInt)从集合转化为数组 List list=new ArrayList(); //10个随机数 //方式1 while(list.size()<10){ //随机数生成:[1,20]---[-128,127]之间---常量池 int random=(int)(Math.random()*20)+1; list.add(random);//jdk5.0以后的装箱----Integer类型 //只有查过两个元素才去比较 if(list.size()==1){ continue; } //判断 for(int i=0;i<list.size()-1;i++){ //每添加一个就遍历 if(list.get(list.size()-1).equals(list.get(i))){ list.remove(list.size()-1);//删除对应的元素 break;//继续进行While判断 } } } //生成10个随机数后将其转换为数组---toArray() System.out.println(list);//集合输出的形式 Object[] a=list.toArray(); System.out.println("分割线------------------------"); //方式2 //创建迭代器对象(List特有的) ListIterator iterator = list.listIterator(); while(iterator.hasNext()){ Integer integer=(Integer)iterator.next(); int temp=integer.intValue(); System.out.print(temp+" "); } } }练习2
package 测试; //学生类 public class Student{ private String name; private int age; public Student() { // ctrl+alt+s---c----默认构造方法 super(); } public Student(String name, int age) { //ctrl+alt+s---o---有参的构造方法 super(); this.name = name; this.age = age; } //ctrl+alt+s---r----SetXXX,GetXXX方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
测试类
package 测试; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; //使用ArrayList集合存储自定义对象并遍历(三种方式去实现) public class ArrayListDemo { public static void main(String[] args) { List list=new ArrayList(); Student a1=new Student("张三",23); Student b1=new Student("李四",24); Student c1=new Student("王五",25); Student d1=new Student("麻六",26); //向集合添加元素 list.add(a1);//向上转型 list.add(b1); list.add(c1); list.add(d1); //明白一点:此时List集合中的元素类型是Object,所以get()获得的是object对象 //方式1--for循环--get()+size() for(int i=0;i<list.size();i++){ Student student=(Student)list.get(i); System.out.print(student.getName()+":"+student.getAge()+"--"+" "); } System.out.println(); //方式2---大众化的Iterator Iterator iterator=list.iterator(); while(iterator.hasNext()){ Student student=(Student)iterator.next(); System.out.print(student.getName()+":"+student.getAge()+"--"+" "); } System.out.println(); //方式3---List特有的ListIterator ListIterator listIterator = list.listIterator(); while(listIterator.hasNext()){ Student student=(Student)listIterator.next(); System.out.print(student.getName()+":"+student.getAge()+"--"+" "); } System.out.println(); //方式4---for循环(老美常用) //方式3与方式4的区别:方式4由于迭代器对象是在方法内创建的,更节省内存,但我们更倾向于使用方式3 for(Iterator iterator1=list.iterator();iterator1.hasNext();){ Student student=(Student)iterator1.next(); System.out.print(student.getName()+":"+student.getAge()+"--"+" "); } } }
练习3
package 测试; public class Demo1 { public static void main(String[] args) { String s1 = new String("hello"); String s2 = new String("hello"); System.out.print(s1 == s2);//地址 System.out.print(","); System.out.println(s1.equals(s2));//内容 } } /* 明白一点:new String在方法区在堆内存开辟空间,而不是在常量池 * 结果:false,true */练习4
package 测试; public class Demo2 { public static void main(String arg[]) { StringBuffer a = new StringBuffer("A"); StringBuffer b = new StringBuffer("B"); operate(a, b);//调用方法 System.out.println(a + "," + b); } static void operate(StringBuffer a, StringBuffer b) { a.append(b);//x变了,y不变→x:AB---y:B b = a;//x、y都指向x的对象--→x:AB---y:AB } } /* 明白一点StringBuffer未创建新的对象 * 结果:AB,B * 分析是不是很惊奇,为何不是AB,AB---理解上在方法区开辟了一个新的变量x,y--方法结束后,引用断开(被垃圾回收) * 如果带点迷惑性,将x,y变成a,b呢?你还会"晕倒"吗? */练习5
package 测试; public class Demo3 { public static void main(String[] args) { String str1 = "This is a test!"; StringBuffer str2 = new StringBuffer("This is a test!"); str1 = str1 + "Hi"; str2.append("Hi"); System.out.println("str1 == " + str1); System.out.println("str2 == " + str2); } } /* 结果:str1 == This is a test!Hi * str2 == This is a test!Hi * 分析:常量池,堆内存,直接赋值(对象不可改变,只能去创建新的对象) * **/练习6
package 测试; public class TestValue { private static int a;//(1) public static void main(String[] args) {//(2) modify(a);//(3) System.out.println(a);//(5) } public static void modify(int a) {//(4) a++; } } /* * 结果:0 * 分析:成员变量---系统会根据对应数据类型赋值 * 了解静态变量的初始化方式--→熟知的由静态代码块和定义时赋值 * 关于成员方法----使用时才去调用(不管是否静态) * 关于类加载,在静态方法区,先去加载类,再去加载静态成员(对象,变量,静态代码块---不分先后) * */
相关文章推荐
- java程序员从笨鸟到菜鸟之(十二)String练习
- Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解
- Java程序员从笨鸟到菜鸟之(四十九)细谈struts2(十一)OGNL表达式的基本语法和用法
- Java程序员从笨鸟到菜鸟之(四十一)细谈struts2(五)action基础知识和数据校验
- Java程序员从笨鸟到菜鸟之(八十)细谈Spring(九)spring+hibernate声明式事务管理详解
- Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现
- Java程序员从笨鸟到菜鸟之(八)反射和代理机制
- Java程序员从笨鸟到菜鸟之(八十三)细谈Spring(十二)OpenSessionInView详解及用法
- Java程序员从笨鸟到菜鸟之(四十九)细谈struts2(十一)OGNL表达式的基本语法和用法
- Java程序员从笨鸟到菜鸟之(八十五)跟我学jquery(一)爱之初体验jquery
- Java程序员从笨鸟到菜鸟之(六十八)细谈Spring(二)自己动手模拟spring
- Java程序员从笨鸟到菜鸟之(十一)多线程讲解
- Java程序员从笨鸟到菜鸟全部博客目录
- Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
- Java程序员从笨鸟到菜鸟之(三十六)大话设计模式(六)观察者模式
- Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理
- Java程序员从笨鸟到菜鸟之(三)面向对象之封装,继承,多态(下)
- Java程序员从笨鸟到菜鸟之(八十七)跟我学jquery(三)jquery动态创建元素和常用函数示例
- Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservice
- Java程序员从笨鸟到菜鸟之(二十一)java过滤器和监听器详解 【转】