zoukankan      html  css  js  c++  java
  • java2

    (一)学习总结

    1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
    a构造方法:方法名与类的名称相同并且没有返回值的方法叫做构造方法
    b构造方法重载:在同一个类当中方法的名称相同,但是方法中的传递参数的类型不同
    c程序不能通过编译,foo类中没有无参构造方法

    2.运行下列程序,结果是什么?分析原因,应如何修改。

    public class Test {
        public static void main(String[] args) {
            Foo obj1 = new Foo();
            Foo obj2 = new Foo();
            System.out.println(obj1 == obj2);
        }
    }
    class Foo{
        int value = 100;
    }
    

    a编译不能通过,类的对象没有进行实例化,必须用new对对象进行实例化

    3运行下列程序,结果是什么?说明原因。

    public class Test {
        public static void main(String[] args) {
            Foo obj1 = new Foo();
            Foo obj2 = new Foo();
            System.out.println(obj1 == obj2);
        }
    }
    class Foo{
        int value = 100;
    }
    

    a.运行结果是:false
    b:原因:每次用new实例化对象都会开辟一个新地址,“==”实际上比较的是内存地址

    4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
    a:面向对象用关键字private关键字对对象的各种属性进行封装。
    b:举例:private int data;这个语句就是对日期属性的封装,如果想要调用属性必须对类设置set,get方法。

    5.阅读下面程序,分析是否能编译通过?如果不能,说明原因。
    (1)

    class A{
        private int secret = 5;
    }
    public class Test{
        public static void main(String args[]){
            A a = new A();
            System.out.println(a.secret++);
        }
    }
    

    a.编译不能通过,secret是进行封装过的属性不能直接调用,必须用get方法进行获得属性

    (2)

    public class Test{
        int x = 50;
        static int y = 200;
        public static void method(){
            System.out.println(x+y);
        }
        public static void main(String args[]){
            Test.method();
        }
    }
    

    a:static是静态访问常量,x没有用static进行修饰不能在别的类中直接访问

    6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。

    class Book{
        int bookId;
        String bookName;
        double price;
        // 声明静态变量
        public static n;
        //定义静态代码块对静态变量初始化
        static {
              n=0;
        }
        //构造方法
        
         public String getBookName() {
            return bookName;
        }
        public void setBookName(String bookName) {
            this.bookName = bookName;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }  
        //定义方法求图书总册数
          public int totalBook(){
              return n;
         }
        //重写toString方法
         public string toString(){
           return "编号"+bookld+“书名”+bookName+"价格"+"price "+"图书总数目为"+n;
        }
    }
    public class Test{
        public static void main(String args[]){ 
            Book[] books = {new Book("c语言程序设计",29.3),
                            new Book("数据库原理",30),
                            new Book("Java学习笔记",68)};
            System.out.println("图书总数为:"+ Book.totalBook()); 
            for(Book book:books){
                System.out.println(book.toString());
            }
        }   
    }
    

    7.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。
    单例模式只有一个实例

    1、单例类只能有一个实例。
    2、单例类必须自己创建自己的唯一实例。
    3、单例类必须给所有其他对象提供这一实例。
    public Class Sun{
        private Class eg = new Class;
        
        public Sun(){}
        public Sun getEg(){
        return eg;
    }
        
    }
    

    8.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。

    public class Test {
        String str = new String("你好  ");
        char[] ch = { 'w','o','l','l','d' };
        public static void main(String args[]) {
            Test test = new Test();
            test.change(test.str, test.ch);
            System.out.print(test.str);
            System.out.print(test.ch);
        }
        public void change(String str, char ch[]) {
            str = "hello";
            ch[0] = 'W';
        }
    }
    

    a.运行结果:你好Wolld

    (二)实验总结

    用面向对象思想完成评分系统:

    package 评分改进;
    
    import java.util.Scanner;
    
    //评分类
    class PingFenLei {
    	private int pws;
    	XuanShou xs = null;
    	private float[] pwdf = null;
    
    	public PingFenLei() {
    	} // 定义构造方法
    
    	public PingFenLei(int pws, XuanShou xs) { // 含参构造方法
    		this.setPws(pws);
    		this.setXs(xs);
    	}
    
    	public void setPws(int p) { // 设置评委数
    		pws = p;
    	}
    
    	public int getPws() { // 获得评委数
    		return pws;
    	}
    
    	public float[] getPwdf() { // 获得评委打分分数
    		return this.pwdf;
    	}
    
    	public void setPwdf() { // 设置评委打分分数
    		System.out.println("请为" + this.xs.getNumber() + "号选手打分:");
    		Scanner input = new Scanner(System.in);
    		// System.out.println(pws);
    		pwdf = new float[this.pws];
    		// System.out.println(pwdf.length);
    		for (int i = 0; i < this.pws; i++) {
    			float a = input.nextFloat();
    			this.pwdf[i] = a;
    		}
    	}
    
    	public XuanShou getXs() {
    		return this.xs;
    	}
    
    	public void setXs(XuanShou xs) {
    		this.xs = xs;
    	}
    
    	public float Max() {
    		int i = 0;
    		float max;
    		float p[] = null;
    		p = getPwdf();
    		max = p[i];
    		for (; i < getPws(); i++) {
    			if (max < pwdf[i]) {
    				max = pwdf[i];
    			}
    		}
    		System.out.println("去掉最高分" + max);
    		return max;
    	}
    
    	public float Min() {
    		int i = 0;
    		float min;
    		float p[] = null;
    		p = getPwdf();
    		min = p[i];
    		for (; i < getPws(); i++) {
    			if (min > pwdf[i]) {
    				min = pwdf[i];
    			}
    		}
    		System.out.println("去掉最低分" + min);
    		return min;
    	}
    
    	public float ave() {
    		float sum = 0;
    		float ave = 0;
    		for (int i = 0; i < this.pwdf.length; i++) {
    			sum += pwdf[i];
    		}
    		sum = sum - Max() - Min();
    		ave = sum / (this.pws - 2);
    
    		return ave;
    	}
    }
    
    package 评分改进;
    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Text {
    	public static void main(String args[]) {
    		int xss, pws, i;
    		String bianhao, name;
    		Scanner in = new Scanner(System.in);
    		System.out.println("输入选手数");
    		xss = in.nextInt();
    		System.out.println("输入评委数");
    		pws = in.nextInt();
    		XuanShou[] xs = new XuanShou[xss];
    		for (i = 0; i < xss; i++) {
    			System.out.println("输入选手编号:");
    			bianhao = in.next();
    			System.out.println("输入选手姓名:");
    			name = in.next();
    			xs[i] = new XuanShou(bianhao, name);
    			PingFenLei per = new PingFenLei(pws, xs[i]);
    			per.setPwdf();
    
    			xs[i].setScore(per.ave());
    			System.out.println(bianhao + "号选手最后得分" + xs[i].getScore());
    		}
    		System.out.println("排行榜");
    		Arrays.sort(xs);
    		for (i = 0; i < xss; i++) {
    			System.out.println(xs[i]);
    		}
    	}
    
    }
    
    package 评分改进;
    
    //选手类
    class XuanShou implements Comparable<XuanShou> {
    	// public static float[] pwdf;
    	private String number;
    	private String name;
    	private float score;
    
    	public XuanShou() {
    	}// 定义无参构造
    
    	public XuanShou(String bianhao, String name) {
    		this.setNumber(bianhao);
    		this.setName(name);
    	}; // 定义有参构造方法
    
    	public XuanShou(float a) {
    		this.score = a;
    	}
    
    	public void setName(String n2) { // 设置选手姓名
    		name = n2;
    	}
    
    	public String getName() { // 取得选手姓名
    		return name;
    	}
    
    	public void setNumber(String num) { // 设置选手编号
    		number = num;
    	}
    
    	public String getNumber() { // 取得选手编号
    		return number;
    	}
    
    	public void setScore(float s) { // 设置选手最终分数
    		score = s;
    	}
    
    	public float getScore() { // 取得选手最终分数
    		return score;
    	}
    
    	@Override
    	public int compareTo(XuanShou o) {// 排序方法
    		if (this.score > o.score) {
    			return -1;
    		} else if (this.score < o.score) {
    			return 1;
    		} else {
    			return 0;
    		}
    	}
    
    	public String toString() {
    		return "编号:" + this.number + "姓名:" + this.name + "得分:" + this.score;
    	}
    }
    
    

    2.Email验证

    package 判断邮箱;
    import java.util.Scanner;
    public class YouXiang {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int x;
    		String c;
    		String s1="@";
    		String s2=".";
    		String end1="com",end2="cn",end3="gov",end4="gov",end5="edu",end6="org";
    		int a=0,b=0,d=0,e=0,f=0,a1;
    		Scanner in = new Scanner(System.in);
    		do {
    			if(f==0)
    			System.out.println("请输入您的邮箱地址:");
    			
    			if(f!=0)
    			System.out.println("您输入的邮箱地址有误,请您重新输入您的邮箱地址:");	
    			c = in.next();
    			System.out.println("您输入的邮箱地址为:"+c);
    			//判断是否包含@和.
    			if(c.contains(s1)) {
    			if(c.contains(s2)) {
    				a=1;
    			}
    		}
    			//判断是否@在.前面
    		if(c.indexOf(s1)<c.indexOf(s2)) {
    			b=1;
    		}
    		//判断@是不是第一位开头
    		if(c.indexOf(s1)!=0) {
    			d=1;
    		}
    		if(c.endsWith(end1)||c.endsWith(end2)||c.endsWith(end3)||c.endsWith(end4)||c.endsWith(end5)||c.endsWith(end6)) {
    			e=1;
    		}
    		f++;
    		}while(a!=1||b!=1||d!=1||e!=1);
    	  	System.out.println("您输入的邮箱格式正确");
    	}
    }
    

    3.查找子串

    package 字串数;
    
    import java.util.Scanner;
    
    public class ZiChanShu {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int i, j, n = 0, k;
    		String c1;
    		String c2;
    		Scanner input = new Scanner(System.in);
    		System.out.println("请输入字符串:");
    		c1 = input.next();
    		System.out.println("请输入要查找的字符串:");
    		c2 = input.next();
    		char c3[] = c1.toCharArray();
    		char c4[] = c2.toCharArray();
    //		System.out.println("c3.length:" + c3.length);
    //		System.out.println("c4.length:" + c4.length);
    		k = c4.length - 1;
    //		System.out.println("k:" + k);
    		if (k == 0) {
    			for(i=0,j=0;i<c3.length;i++) {
    				if(c3[i]==c4[0]) {
    					n++;
    				}
    			}
    
    		} else {
    			for (i = 0, j = 0; i < c3.length; i++) {
    				if (c3[i] == c4[j]) {				
    //					System.out.println("i:" + i + "	j:" + j);
    					if (j == k) {
    						n++;
    						j = 0;
    //						System.out.println("j:" + j + "	n:" + n);
    					} 
    					
    				}
    				else {
    					j = 0;
    				}
    				if (c3[i] == c4[j]&&j!=k)
    				j++;
    				else {
    					j=0;
    				}
    			}
    		}
    
    		System.out.println("字串的数量是:" + n);
    	}
    }
    
    • 遇到的问题: 1:输入任何字串,最后显示的字串数量总是为零 解决: 开始误认为j==c4.length时应当
    • n++,实则是j==c4.length-1时n++ 2:如果字串的数量是1个的话,字串数量显示0 解决:
    • 增加一个if分支,判断如果字串只有一个的话则改变方法;

  • 相关阅读:
    Eclipse 常用快捷键和使用技巧
    Android Studio 常用快捷键和使用技巧
    Android之省市区三级联动
    Android assets文件夹之位置放置和作用
    Android之SwipeRefreshLayout下拉刷新组件
    Android设计模式之工厂模式
    Android之侧滑菜单DrawerLayout的使用
    Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
    Docker技术入门与实战 第二版-学习笔记-8-网络功能network-2-相应配置
    Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-1-cli
  • 原文地址:https://www.cnblogs.com/myfdpk/p/8688872.html
Copyright © 2011-2022 走看看