java2

Posted 何政佳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java2相关的知识,希望对你有一定的参考价值。

一、学习要点

认真看书并查阅相关资料,掌握以下内容:

理解对象的创建与引用的关系
掌握构造方法的重载
掌握String类
掌握类的设计方法
掌握this关键字
掌握static关键字
理解引用传递并掌握基本应用
掌握单例模式
理解内部类
(一)学习总结

1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?

public class Test {
    public static void main(String args[]) { 
       Foo obj = new Foo();       
    }     
}
class Foo{
    int value;
    public Foo(int intValue){
        value = intValue;
    }
}
- 不能通过编译
- 类中只定义了有参的构造函数,如果一个类中已经明确定义了构造方法,则系统不再提供默认的构造方法。
- 为了避免出现错误,在一个类中如果定义了一个有参的构造方法时,最好再定义一个无参的构造方法。

构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。
对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。.
当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
方法重载:
1.必须在同一个类
2.方法名相同
3.方法参数个数或参数类型(或参数顺序)不同
注:
1.参数顺序指的是参数类型顺序,与参数名字无关,比如show(int a,,Stringa,int c)和show(int c,String b,int a)是一样的方法,
非方法重载,因为他们的参数类型顺序一样是int,String,int
2.方法重载与访问权限修饰符和方法返回值无关

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

public class Test {
    public static void main(String[] args) {
        MyClass[] arr=new MyClass[3];
        arr[1].value=100;
    }
}
class MyClass{
    public int value=1;
}

无法运行

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;
}

结果:false
new开辟内存空间,obj1与obj2首地址不同,所以无法正确。

4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
所谓封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性。
封装就是定义一个类,然后给该类的属性(成员变量)和方法加上访问控制修饰词(public,private, protected,默认包访问权限),
使得该类的属性和方法对于类外部来说,想可见的可见,不想可见的隐藏。

eg:private 。。。声明私有变量
public则是共有属性。
setter,getter方法用来设置及调用
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 不可视
(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();
    }
}

Exception in thread "main" java.lang.Error: 无法解析的编译问题:
不能对非静态字段 x 进行静态引用

at Text.method(Text.java:5)
at Text.main(Text.java:8)

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

class Book{
    int bookId;
    String bookName;
    double price;
    // 声明静态变量
    
    //定义静态代码块对静态变量初始化
    
    //构造方法
    
     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 void zongshu()
    public void totalBook(){
    return n;
}
    //重写toString方法
    public void 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。
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。显然单例模式的要点有三个:
一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

public class Sun{
    private Sun() {}
    private static Sun sun=new Sun();
    public static Sun getS() {
        return sun;
    }
}

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\';
    }
}

运行结果:你好 Wolld
没有改变主方法中str的值
总结
equals()方法:用于内容的比较,比较两个字符串内容是否相等

    1. 输出转义字符要加 ,sqrt(".")
      以及spilt断开字符串
      spilt(",");
      arrayfill
  • static关键字在类中可以声明变量或方法。
    • 静态变量(类变量)
      • 用static声明的变量称为静态变量(类变量、全局变量),不带static的变量都是实例变量。
    • 实例变量存储在对象的内存单元中,每个对象的实例变量都有自己的存储空间,通过对象名访问这些实例变量。
    • 静态变量被保存在类的内存区的公共存储单元中,而不是保存在某个对象的内存区中。
      因此,一个类的任何对象访问它时,存取到的都是相同的数值。一个类的任何对象修改它,都是对同一内存单元进行操作。
      可以通过类名或对象名访问它,一般是通过类名完成调用。
    • 静态变量初始化时,变量被计算和赋值,此过程只有一次。
      https://gitee.com/hebau_java_cs16/Java_CS02hzj.git
      没上传成功
package 类评分;

import java.util.Arrays;
import java.util.Scanner;

//public
//int i,j;
//int max,min,sum=0;
//int x[]=new int[10];
//int y[]=new int[5];

class player
		{
			private String bianhao;
			private String name;
			private int chengji;
		    
		public void tell()
		{
		    System.out.print("编号"+getbianhao()+"姓名"+getname()+"成绩"+getchengji());
		}
		public String getbianhao()
		{
			return name;
		}
		public void setbianhao(){
			this.bianhao=bianhao;
		}
		public String getname()
		{
			return name;
		}
		public void setname(){
			this.name=name;
		}
		public int getchengji()
		{
			return chengji;
		}
		public void setchengji()
		{
			this.chengji=chengji;
		}
    
		public void toString()
		{
		    return "编号"+getbianhao()+"姓名"+getname()+"成绩"+getchengji();
		}
		/*public void shuru()
		{
			int i,j;
			int max,min,sum=0;
			int x[]=new int[10];
			int y[]=new int[5];
			for(j=0;j<5;j++)
			{
			for(i=0;i<10;i++)
			{
				Scanner in=new Scanner(System.in);
				x[i]=in.nextInt();
			}
		    }
		}
		*/
		
		public int paixu()
		{
			int i,j;
			int max,min,sum=0;
			int x[]=new int[10];
			int y[]=new int[5];
			for(j=0;j<5;j++)
			{
			for(i=0;i<10;i++)
			{
				Scanner in=new Scanner(System.in);
				x[i]=in.nextInt();
			}
		    }
			
			
			for(i=0;i<10;i++)
			{
				Arrays.sort(x);
				System.out.print(" "+x[i]);	
			}
			x[0]=0;
			x[9]=0;
			for(i=0;i<10;i++)
			{
				Arrays.sort(x);
				System.out.print(" "+x[i]);	
				sum=sum+x[i];
			}
			max=x[9];
			min=x[3];
			System.out.println(max+min+sum/8);
			return (max+min+sum/8);
		}
	
		
		}		
public class 类评分 
{
    public static void main(String args[])
	{
    	int a;
		player p=new player();
		//p.shuru();
		p.setbianhao();
		p.setname();
		p.setchengji();
		p.tell();
		p.paixu();
		a=p.paixu();
		System.out.println(a);
	}
	

}	


package pingfen;

import java.util.Arrays;
import java.util.Scanner;

public class pingfen {public static void main(String args[]){
	int i,j;
	int max,min,sum=0;
	int x[]=new int[10];
	int y[]=new int[5];
	for(j=0;j<5;j++){
	for(i=0;i<10;i++)
	{
		Scanner in=new Scanner(System.in);
		x[i]=in.nextInt();
	
	
	}
	for(i=0;i<10;i++)
	{
		Arrays.sort(x);
		System.out.print(" "+x[i]);	
	}
	x[0]=0;
	x[9]=0;
	for(i=0;i<10;i++)
	{
		Arrays.sort(x);
		System.out.print(" "+x[i]);	
		sum=sum+x[i];
	}
	max=x[9];
	min=x[3];
	System.out.print("max="+max+"min="+min+"sum/8="+sum/8);	
}
}
}

package youxiang;
import java.util.Scanner;
public class youxiang {
	public static void main(String args[]){
		System.out.println("请输入Email");
		System.out.println("Email格式为6845846@。com");
		Scanner input=new Scanner(System.in);
		String mail=input.nextLine();//输入邮箱
		System.out.println(mail.varchar(10));
		System.out.println(mail.indexOf("@")+1);
		System.out.println(mail.indexOf(".")+1);
		if(mail.indexOf("@")==0){
			//@不能开头
			System.out.println("Email不合规格"+"  请重新输入");	
		}
		//if(mail.indexOf("@")!=0)
		else
		{
			if(mail.indexOf(".")>mail.indexOf("@")){
			System.out.println("请输出Email"+\'\\n\'+mail);
			
				
			//	if(mail.endsWith("com||cn||net||gov||edu||org")){
				//	System.out.println("mail");
				//}
				
				
		}
		}
	
	}
}







package youxiang;
import java.util.Scanner;
public class youxiang {
	public static void main(String args[]){
		System.out.println("请输入Email");
		System.out.println("Email格式为6845846@。com");
		Scanner input=new Scanner(System.in);
		String mail=input.nextLine();//输入邮箱
		
		System.out.println(mail.indexOf("@")+1);
		System.out.println(mail.indexOf(".")+1);
		//if(mail.indexOf("@")==0){
			//@不能开头
			//System.out.println("Email不合规格"+"  请重新输入");	
		//}
		if(mail.indexOf("@")!=0)
		//else
		{
			if(mail.indexOf(".")>mail.indexOf("@")){//“。”不能在“@”前面
			System.out.println("请输出Email"+\'\\n\'+mail);
			System.out.println(mail.substring(10));
				
			//	if(mail.endsWith("com||cn||net||gov||edu||org")){
				//	System.out.println("mail");
				//}
				
				
		}
		}
	
	}

}


package find;

import java.util.Scanner;

public class find {
public static void main(String args[]){
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String str=input.nextLine();
String s[]=str.split(",");
int b=0,c=0,d=0;
for(int i=0;i<s.length;i++)
{
	
	System.out.println(s[i]);
	//String a[]=str.split("\\\\.");
	//System.out.println(a[i]);
	 
    if(s[i].endsWith(".java")){
   	 b++;
    }
    if(s[i].endsWith(".cpp")){
   	 c++;
    }
    if(s[i].endsWith(".txt")){
   	 d++; 
    }
    String n=s[i].substring(0,1);
    System.out.println(n.toUpperCase()+s[i].substring(1,s[i].length()));
   
}
System.out.println(".java出现的次数为:"+b); 
System.out.println(".cpp出现的次数为:"+c);
System.out.println(".txt出现的次数为:"+d);
}
}

package find;

import java.util.Scanner;

public class find {
public static void main(String args[]){
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String str=input.nextLine();
String s[]=str.split(",");
int b=0,c=0,d=0;
for(int i=0;i<s.length;i++)
{
	
	System.out.println(s[i]);
	//String a[]=str.split("\\\\.");
	//System.out.println(a[i]);
	 
    if(s[i].endsWith(".java")){
   	 b++;
    }
    if(s[i].endsWith(".cpp")){
   	 c++;
    }
    if(s[i].endsWith(".txt")){
   	 d++; 
    }
    String n=s[i].substring(0,1);
    System.out.println(n.toUpperCase()+s[i].substring(1,s[i].length()));
   
}
System.out.println(".java出现的次数为:"+b); 
System.out.println(".cpp出现的次数为:"+c);
System.out.println(".txt出现的次数为:"+d);
}
}


class Datetime {
 			private int year;
 			private int month;
 			private int day;
 			public Datetime () {
 			}
 		public Datetime(int year,int month,int day) {
 				this.year=year;
 				this.month=month;
 				this.day=day;
 			}
 			public void geteyear(int year) {
 			this.year=year;
 			}
 			public int setyear() {
 				return year;
 			}
 		public void getetmonth(int month) {
 				this.month=month;
 			}
 			public int setmonth() {
 			return month;
 			}
 			public void getday(int day) {
 				this.day=day;
 			}
 			public int setday() {
 				return day;
 			}
 			public String toString() {
 				return year+"-"+month+"-"+day;
 			}
 	}

以上是关于java2的主要内容,如果未能解决你的问题,请参考以下文章

廖雪峰Java2面向对象编程-3继承和多态-1继承

java2周来的一些心得和体会

Java2_Java泛型

Effective Java2读书笔记-创建和销毁对象

Java2E中的路径问题

JAVA2E servlet的跳转