java第一阶段小总结

纠结了这么久才整理好对第一个学习阶段的小总结。

 

   总的来说第一个阶段所作的事情都离不开JAVA.AWT.GRAPHICES所有要用到的东西基本都是自绘出来的。所以写程序起来也相当的麻烦,一个简单的画布到处出来传去。还好加了一个static只有的工作就简单了少许。

  第一个阶段所完成的项目

 

    ①一个简单的画板

    ②简单的文件搜索器

    ③人人对战五子棋

    ④坦克大战自绘版

    ⑤坦克大战图片版

 

 

对一些问题的小结

 

 1、继承、多态、重写?

     继承:就是在父类的基础上,写一个新的子类,拥有父类所有的方法和定义的变量。也可以再写自己的方法。

               简单来说就是相当与对父类的一个拓展

 

     多态:我觉得它的作用就是用来将接口和实现分离开,改善代码的组织结构,增强代码的可读性。在某些很简单的情况下,或许我们不使用多态也能开发出满足我们需要的程序,但大多数情况,如果没有多态,就会觉得代码极其难以维护。

     重写:对父类方法的一个重新编写,覆盖父类的方法。

 

 2.数据类型、值传递和引用传递有什么区别,String是什么传递?

   值传递:相当与对原数据类新拷贝了一个具有相同值的新的空间,对其的操作影响不了原来的数据。

   应用传递:与值传递的刚好相反,就是两个或者多个操作会用到同一个地址的数据,当然,其值会受多个的影响而改变。

 

基本的数据类型如int double long int ...都是值传递,而一些包装后的类则是引用传递。

特例:String 为值传递

 

  3.Set如何遍历,有哪些子类、List如何遍历,有哪些子类、Map如何遍历,有哪些子类
    Map中是否可以放入null的key或Vlaue?Set,List呢?

   

    Set :一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1e2,并且最多包含一个 null 元素.

           就相当于数学上的集合

所有已知实现类:
AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet

    Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 不能存放NUll

所有已知实现类:
AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap

    List: 有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

 

与 set 不同,列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2) 的元素对 e1e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。难免有人希望通过在用户尝试插入重复元素时抛出运行时异常的方法来禁止重复的列表,但我们希望这种用法越少越好。

所有已知实现类:
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector

 4.Swing界面相关,Swing组件的继承体系图、事件监听器的继承体系图。

 

swing 的集成体系

java.lang.Object
  java.awt.Component
      java.awt.Container
          javax.swing.JComponent

EVEN的

java.lang.Object
  java.util.EventObject
      java.awt.AWTEvent

 

5.递归与循环的区别?

  递归和循环是两个不同的概念,递归是函数的调用在调用,是整个函数,而循环是在函数内部.有的用递归写的算法,如果改成循环会很复杂。递归的本质是系统把你的中间结果进行出栈入栈。开销是稍微大点,但是可以用简短的代码实现复杂的算法。

 

 6.异常体系:异常分类。throws、throw、Throable、Exception的区别?
             运行时异常、编译时检测异常和Error的区别,哪些异常是Error?

 

在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个时候jvm在做的操作就是:创建异常对象,然后抛出。

但是有些异常时JVM无法判断出来(人的年龄范围)的则需要手动抛出,即throw的作用

 

java中一些特定的方法函数会产生一些异常,这个时候就必须要用try()catch{}来打印异常,如果想不管异常的出现也不答应的话就抛出异常 ,即throws

 

Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。


 

Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。

 

运行时异常:RuntimeException   就是一些一些人为无法估计也难以控制的一异常,如读取U盘内容的时候,U盘被拔下来了,这些都是程序无法控制的。

 

编译时检测异常:就是一些逻辑上或则考虑上不全面的异常。比如:1/0的异常。

 

错误(ERROR):错误则是个人的逻辑思维或则代码语法错误。

 

  7.I/O流继承体系结构图和分类。原始数据类型读写。

  • java.lang.Object
      java.io.InputStream
直接已知子类:
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream

InputStream可以对原始的数据类型进行一个一个字节的读取,所以,可以用inputStream对任何的文件进行复制。

 

  8.线程:线程在程序中有几种状态?有几种方式创建线程?各适用什么场景。

进程   一台机器中的多个运行单位

 

线程   一个进程中的多个运行单位

 

如:QQ 可以一边的发文件一边的聊天,即同时做多个事情。

 

线程的定义、使用

 

线程里面传参数只能通过构造函数去传

 

 

① 定义

1、线程类,继承(extends )Thread

2(impelments) Runnable接口

 

②重写run方法。

   ③创建一个线程对象。

   ④启动线程不是调用run()方法,而是调用他的stat()方法。如果是继承了Thread的就直接调用start()。如果是实现Runnable则需要用Thread包装一下才能使用其调用start()来启动线程。

 

 

线程的模型

 

线程的停止:就是让run()放发执行完毕。

 

用进度条来实现

 

线程的继续:

线程的暂停:

 

只用些了两个变量  

Private Boolean isStop = false ;//是否停止

Private Boolean isSuspend = false ;//是否暂停

定义在线程的类里面

//线程类,继承Thread
public class ThreadTest extends Thread {

	private boolean isStop = false;// 是否停止
	private boolean isSuspend = false;// 是否暂停

	private javax.swing.JProgressBar label;

	int time = 0;// 时间

	public ThreadTest(javax.swing.JProgressBar label) {
		this.label = label;
	}

	// 重写run方法
	public void run() {

		while (!isStop) {

			while (!isSuspend) {

				// System.out.println(">>>>>"+time);
				label.setValue(time);
//				label.setString(time+"");

				try {
					// 让线程休眠一秒
					Thread.sleep(300);
				} catch (Exception ef) {
					ef.printStackTrace();
				}

				time++;
				
				//达到最大值就停止线程
				if(time>label.getMaximum()){
					stopThread();
				}

			}

			try {
				Thread.sleep(10);
			} catch (Exception ef) {
				ef.printStackTrace();
			}
			System.out.println(">>>>>线程暂停了。。");
		}
		System.out.println(">>>>>线程停止。。");
	}

  

 

 
  

 

 

要暂停或者停止的话只要增加两个监听器改变isStopisSuspend的值就可以了

注意的是,暂停只需要跳出一个while循环,停止就需要跳出两个while循环。

 

 

但是在暂停的时候其实我们做的事一个死循环的操作,系统的CPU使用率会非常的高。为了降低CPU的使用率,则需要在死循环中在加上一个sleep(),降低CPU的使用率.

 

 

 

设置一个进度条:

Javax.swing.JProgressBar

调用 

void

setMaximum(int n) 
          将进度条的最大值(存储在进度条的数据模型中)设置为 n。

 void

setMinimum(int n) 
          将进度条的最小值(存储在进度条的数据模型中)设置为 n。

 

void

setValue(int n) 
          将进度条的当前值设置为 n。

 

就可以看到线程进度的暂停和停止了。

 

 

 

另外:任何类型的和字符串加在一起都变成了字符串

      如int time;

      Time+””就变成了一个字符串了

 

      改变组件的大小

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java第一阶段小总结)