Java Review

从今天起复习Java,相信到最后一定会考过哒。

1.接口中的方法默认是public abstract方法,因此我们在编写接口的实现类的时候,方法的实现前面要显式的加上public访问控制符。

2.异常也是一个对象,java里面什么都是对象

3.Java语言中,变量名可以用汉字表示

4.StringBuffer类是线程安全的,StringBuilder类是线程不安全的

5.子类不继承父类的构造方法,他的原则就是子类继承父类的成员属性,包括实例成员变量和类成员变量。子类也可以继承除构造方法之外的所有成员方法,包括实例成员方法和类成员方法。

6.程序运行中可以不改变数组的大小

7.以下关于构造函数。

  1. 构造函数的返回类型不能指定
  2. 构造函数是类的一种特殊函数,它的方法名必须与类名相同。
  3. 构造函数的主要作用是完成对类的对象的初始化工作。
  4. 一般在创建新对象时,系统会自动调用构造函数。

8. 如果需要从文件中读取数据,则可以在程序中创建哪一个类的对象(FileInputStream)。 (2分)

9.

Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式。

Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串,字符流处理的单元为2个字节的Unicode字符.

字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;

文本用字符流,其余都用字节流。


面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。
面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是Reader和Writer的子类。
总结:以InputStream(输入)/OutputStream(输出)为后缀的是字节流;
以Reader(输入)/Writer(输出)为后缀的是字符流。
扩展:Java流类图结构,一目了然,解决大部分选择题:

10.Java里面类只允许单一继承,但允许实现多个接口。接口可以实现多继承

在Java中一个类也可以同时继承一个类和实现一个接口

例如:

package test;
class Bird {
    int legnum = 2;
 
    void egg() {
    };
    
}
interface Flyanimal{     
	   void fly();  
	}
class Pigeon  extends Bird implements  Flyanimal {  
	   public void fly(){  
	       System.out.println("pigeon  can fly");  
	   }  
	   public void egg(){  
	       System.out.println("pigeon  can lay  eggs ");  
	   }
}

public class Main{

	public static void main(String[] args) {
		Pigeon ff = new Pigeon();
		ff.fly();
		ff.egg();

	}

}
/*输出
pigeon  can fly
pigeon  can lay  eggs 
*/

 

11.java异常

Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。

Throwable又派生出Error类和Exception类。

错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

 异常分为非检查异常:Error 和 RuntimeException 以及他们的子类。

检查异常:除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过

语法

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}

例如

package test;
import java.io.*;

public class TT {

	public static void main(String[] args) {
		int a[] = new int [2];
		a[1] = 0;
		try
		{
			System.out.println(a[3]);
		}
		catch(Exception e)
		{
			System.out.println(e);
			System.out.println(a[1]);
		}
		
	}

}


 

 

 

 

记事本敲代码,javac命令编译,java命令运行

Java虚拟机JVM:解释执行.class文件(字节码),把字节码解释成具体平台上的机器指令执行

Java运行环境JRE:运行Java程序所必须的环境的集合,包括Java 虚拟机 (JVM)、Java核心类和支持文件。 不包含开发工具 --编译器、调试器和其它工具

Java平台JDK由Java应用编程接口(API)和Java虚拟机(JVM)构成,这个平台构成了Java在不同计算机系统中编译和运行的环境

final定义常量——用符号表示常量

关键字:为编译器保留的、具有特定含义的标识符,不能把它用做变量、类或方法的名称,所有的关键字都是小写

boolean类型,

任何程序流程均可以用顺序结构、选择结构、循环结构这三种基本控制结构实现。

面向对象的特点:封装性,继承性,多态性

类和对象的关系:类是对象的定义,对象是类的实例。

引用:Java中除了基本类型以外的变量类型都是引用类型,存放在栈内存区。

§一个方法执行时都会建立自己的内存栈,在方法内定义的变量会逐个放入这个栈内存中。

Ø方法执行结束时方法的内存栈也将自然销毁。

§在程序中创建一个对象时,该对象被保存在运行时数据区,以便反复利用(创建对象成本比较大),该“运行时数据区”是堆内存。对象不会随方法的结束而销毁

 

接口

 

 

接口和抽象类用法上的不同

 

不可变的字符序列 字符串

枚举类型不能通过new创建实例对象  

 容器

分两类

Collection :List,Set,Queue,

Map

 

HashSet 

 

TreeSet 

实现了排序功能,默认按字典序

定制按compareTo排序,TreeSet(Comparator<? super E> comparator)

 

 HashMap

Hashtable

 

 

 

ListIterator 

 

list中指定元素删除

public static List<String> convertStringToList(String str)
	{
		List<String > p = new ArrayList<String>() ;
		String s[] = str.split(" ");
		for(int i = 0; i < s.length; i++)
		{
			p.add(s[i]);
		}
		Iterator it = p.iterator();
		while(it.hasNext())
		{
			if(it.next().equals("")) it.remove();
		}
		return p;
	}
    /*remove函数代码*/
	public static void remove(List <String> list,String str)
	{
		Iterator it = list.iterator();
		while(it.hasNext())
		{
			if(it.next().equals(str)) it.remove();
		}
	}

 object

int n = sc.nextInt();
	    Object ob[] = new Object[n];
	    for(int i = 0; i < n; i++)
	    {
	    	String s = sc.next();
	    	if(s.equals("c"))
	    	{
	    		Computer t = new Computer();
	    		ob[i] = t;
	    	}
	    	else if(s.equals("d"))
	    	{
	    		String ss = sc.next();
	    		ob[i]  = new Double(ss);
	    		
	    	}
	    	else if(s.equals("i"))
	    	{
	    		String ss = sc.next();
	    		ob[i]  = new Integer(ss);
	    		//ob[i] = t;
	    	}
	    	else if(s.equals("s"))
	    	{
	    		ob[i]  = sc.next();
	    		//ob[i] = t;
	    	}
	    	else ob[i] = null;
	    }
	    for(int i = n-1; i >= 0; i--)
	    {
	    	if(ob[i] instanceof String)
	    	System.out.println((String)ob[i]);
	    	else if(ob[i] instanceof Double)
		    System.out.println((Double)ob[i]);
	    	else if(ob[i] instanceof Integer)
		    	System.out.println((Integer)ob[i]);
	    	else if(ob[i] instanceof Computer) {
	    		//Computer c = ;
		    	System.out.println(((Computer)ob[i]).toString());
	    	}
	    }

 

jmu-Java&Python-统计文字中的单词数量并按出现次数排序

package test;

import java.util.*;
import java.util.Map.Entry;
public class Main {

	public static void main(String[] args) {
		Map<String, Integer> map = new TreeMap<>();
		Scanner sc = new Scanner(System.in);
		while(true)
		{
			String s = sc.next();
			if(s.equals("!!!!!"))
			{
				break;
			}
			else {
				if(s.contains("!")||s.contains(",")||s.contains(".")||s.contains("*")||s.contains("?")
						||s.contains(":")	)
					s = s.substring(0, s.length()-1);
				s = s.toLowerCase();
				if(map.containsKey(s)) map.put(s,map.get(s)+1);
				else map.put(s,1);
			}
		}
		List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
		Collections.sort(list,new Comparator<Map.Entry<String, Integer>>()
				{
					public int compare(Entry<String,Integer> o1, Entry<String, Integer>o2)
					{
						return o2.getValue().compareTo(o1.getValue());
					}
					
				}
			);
		System.out.println(map.size());
		int cnt = 1;
		for(Map.Entry<String, Integer> en:list)
		{
			if(cnt >10)break;
			System.out.println(en.toString());
			cnt++;
		}
	}

}


悄悄关注

package test;

import java.util.*;
import java.util.Map.Entry;
public class Main {
	public static void main(String[]args)
	{
		Scanner sc = new Scanner(System.in);
		List<String> list= new ArrayList<>();
		int n = sc.nextInt();
		String s1 = sc.nextLine();
		String[]s2 = s1.split(" ");
		int l = s2.length;
		for(int i = 0; i < l; i++)
		{
			list.add(s2[i]);
		}
		int m = sc.nextInt();
		sc.nextLine();
		double aver = 0, sum = 0;
		Map<String,Integer> peo = new TreeMap<String,Integer>();
		for(int i = 0; i < m; i++)
		{
			String a = sc.next();
			int b = sc.nextInt();
			peo.put(a,b);
			sum+=b;
		}
		List<Map.Entry<String, Integer> >ll = new ArrayList<>(peo.entrySet());
		Collections.sort(ll, 
				new Comparator<Map.Entry<String, Integer>>()
		{
			public int compare(Entry<String,Integer>o1, Entry<String,Integer>o2)
			{
				return o2.getValue().compareTo(o1.getValue());
			}
		}
				);
		aver = sum*1.0/(1.0*m);
		//System.out.println(aver);
		int flag = 0;
		Set<String>set = new TreeSet<>();
		for(Map.Entry<String, Integer>en:ll)
		{
			double temp = en.getValue();
			String ss = en.getKey();
			//System.out.println(temp+ " "+ss);
			if(temp>aver) 
			{
				if(!list.contains(ss))
				{
					flag++;
					set.add(ss);
				}
			}
			else break;
		}
		Iterator it = set.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
		if(flag==0)System.out.println("Bing Mei You");
		
	}
}


 Comparator


import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class PersonSortable2{
	String name;
	int age;
	PersonSortable2(String s, int n)
	{
		name = s;
		age = n;
	}
	public String toString()
	{
		return name+"-"+age;
	}
}
class NameComparator implements Comparator<PersonSortable2>
{

	@Override
	public int compare(PersonSortable2 a1, PersonSortable2 a2) {
		// TODO Auto-generated method stub
		return a1.name.compareTo(a2.name);
	}
	
}
class AgeComparator implements Comparator<PersonSortable2>
{

	@Override
	public int compare(PersonSortable2 arg0, PersonSortable2 arg1) {
		// TODO Auto-generated method stub
		if(arg0.age > arg1.age) return 1;
		else if(arg0.age == arg1.age) return 0;
		else return -1;
	}
	
}

public class Main {
	
	
public static void main(String []args)
{
	Scanner sc = new Scanner(System.in);
	int n = Integer.parseInt(sc.nextLine());
	PersonSortable2 peo[] = new PersonSortable2[n];
	for(int i = 0; i < n; i++){
		String s = sc.nextLine();
		String ss[] = s.split(" ");
		int t = Integer.parseInt(ss[ss.length-1]);
		peo[i] = new PersonSortable2(ss[0],t);
		
	}
	Arrays.sort(peo,new NameComparator());
	System.out.println("NameComparator:sort");
	for(int i = 0; i < n; i++)
	{
		System.out.println(peo[i].toString());
	}
	Arrays.sort(peo,new AgeComparator());
	System.out.println("AgeComparator:sort");
	for(int i = 0; i < n; i++)
	{
		System.out.println(peo[i].toString());
	}
	System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
	System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));
}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值