概述
字节流与字符流的特点与使用
- 字节流操作的基本单元是字节;字符流操作的基本单元是字符
- 字节流默认不使用缓冲区;字符流使用缓冲区
- 字节流通常用于处理二进制数据,不支持直接读写字符;字符流通常用于处理文本数据
- 在读写文件需要对文本内容进行处理:按行处理、比较特定字符的时候一般会选择字符流;仅仅读写文件,不处理内容,一般选择字节流
yield wwait sleep()
1,所属类不同:wait()是Object类中的非静态方法;sleep()、yield()是Thread类中的静态方法。 2、作用不同:wait()用于线程同步或者线程之间进行通信;sleep()用于休眠当前线程, 并在指定的时间点被自动唤醒; yield()临时暂停当前正在执行的线程,来让有同样优先级的正在等待的线程有机会执行 (如果等待的线程优先级较低,则当前线程继续执行)。 3、释放资源:wait()释放对象锁;sleep()不释放对象锁,抱着锁睡觉;yield()仅释放线程所占用的CPU。 4、应用场景不同:wait()适用于同步代码块中;sleep()休眠当前线程,应用场景没有限制; yield()暂停当前线程,应用场景也没有限制。 5、被唤醒后的状态不同:wait()被notify()或者notifyAll()唤醒后,先进入阻塞状态(先获得锁), 然后进入就绪状态;sleep()被唤醒后,进入就绪状态;yield()不需要唤醒,一直处于就绪状态, 获得CPU后继续运行。
String和StringBuffer,StringBuilder
static 的特点
一.俩个变量的生命周期 静态变量随着类的加载而存在,随着类的消失而消失。 二.调用方式 成员变量只能被对象调用。 静态变量可以被对象调用,还可以被类名调用。 三.别名 静态变量称为类变量 四.数据存储位置不同 成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。 静态变量数据存储在方法区(共享数据区)的静态区当中,所以叫做对象的共享享数据。 静态使用的注意事项 静态方法只能访问静态成员。这个静态成员既包含成员变量也包含成员函数。(非静态即可以访问静态,又可以访问非静态)。 静态方法中不可以使用this或者super。 主函数是静态的。
abstract的特点
抽象类的特点: 1,抽象方法一定在抽象类中。 2,抽象方法和抽象类都必须被abstract关键字修饰。 3,抽象类不可以用new创建对象。因为调用抽象方法没意义。 4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类 对象调用。 如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。 abstract 关键字,和哪些关键字不能共存。 final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。 private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。 而抽象方法出现的就是需要被复写。 static:因为可以被类调用 可以有构造函数
java参数传递机制
JAVA的参数传递中参数的引用是不可修改的,2
基本类型作为参数,传递时是传递值的拷贝,2
在JAVA中对象作为参数传递时,是把对象在内存中的地址拷贝了一份给参数。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。2
final类,变量,方法的特点(考了3次)
Final类不能被继承,没有子类;final类中的方法默认是final的,2
Final方法不能被子类的方法覆盖,但可以被继承,Final不能用于修饰构造方法2
final成员变量表示常量,只能被赋值一次,赋值后值不再改变2
什么是引用传递和值传递
引用传递是将对象的引用传递给形参,方法体内局部对象的任何变化都会影响作为参数传递的原对象。1
值传递是将简单类型变量的值传递给形参,改变方法内部的参数,不会影响方法外部的变量值1
重载与方法覆盖的区别
方法的覆盖和重载是JAVA多态性的不同表现,覆盖是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现,2
如果在子类中定义某方法,与其父类有相同的名称和参数,我们说该方法被覆盖,此类的对象使用这个方法是将调用子类中的定义,对他而言,父类中的定义如同被屏蔽了,2
如果在一个类中定义了多个同名的方法,他们会有不同的参数个数或有不同的参数类型,则称为方法的重载。被重载的方法可以改变返回值类型,2
什么是继承
通过必要的说明能够实现某个类无需重新定义就拥有另一个类的某些属性和方法,并把这种关系称为继承,1先定义的类称为父类,后定义的类称为子类,
并且允许多层的继承关系 1
简述 Java 中异常处理的机制?
答:首先 Java 的异常是面向对象的。Exception 是一个描述异常情况的类.当出现异常情况时,一个 Exception 对象就产生了,并放到异常的成员函数里,java 的异常处理是通过5个关键词来实现的 try , catch , throw , throws 和 finally 。2
1.异常处理:在 Java 语言的错误处理结构由 try , catch , finally 三个块组成。其中 try 块存放将可能发生异常的 Java 语言,并管理相关的异常指针; catch 块紧跟在 try 块后面,用来激发被捕获的异常; finally 块包含清除程序没有释放的资源,句柄等。不管 try 块中的代码如何退出,都将执行 finally 块。2
2.抛出异常: java 语言可以不在方法中直接捕获,而用 throw 语句将异常抛给上层的调用者。 Throw 语句就是来明确地抛出一个异常;首先你必需得到一个 Throwable 的实例句柄,通过参数传到 catch 中,或者采用 new 操作符来创建一个。 2
请描述 AWT 事件模型。
结合 AWT 事件模型并举例来说:
iport java . awt . event .*;
1.监听对象必须实现对应事件监听器的接口
class yFirst Frame extends Frame iplements ActionListener
(...
2.明确事件监听器的接口形式 public void actionPerformed ( ActionEvent event ){…}
3. MyFirst Frame 类必须实现接口 ActionList ener 中的所有方法。
4.注册监听对象.为了把 MyFirstFrame 对象注册为两个按钮的事件监听对象,必须在 MyFirstFrame 的构造函数中添加语句如下:
cancel:Button . addActionListener ( this );
ok:Button . addActionList ener ( this );
在 java 中,怎样创建一个线程?
1、定义类来实现 Runnable 接口
class Test Thread iplements Runnable {
public void run (){…}
2、继承 Thread 类来实现
class Test Thread extends Thread {
Test Thread ( String name ){
super ( nae );
start ( O ;
public void run (){.„}
编程
定义一个员工类,实现构造方法和显示方法
public class employee{ public employee(){ } public void show(){ sout: } }
循环打印图形
for(int i=5;i>0;i--){ if(i>3)for(int j=1;j<=5-i+1;j++){ sout* } else for(int j=i;j>0;j--){} }
检查是否是子串
String s1; String s2; cout<<s1.contains(s2);
创建一个 Rectangle 类,添加 width 和 height 两个成员变量(2)在 Rectangle 中添加两种方法分别计算矩形的周长和面积
(3)编程利用 Rectangle 输出一个矩形的周长和面积
public class Rectangle{ private double width; private double height; public Rectangle(double w,double h){ this.width=w; this.height=h; } public double getclen(){ return width+height)*2 } public ddoublee getarea(){ return width*hehight } }
画重点的代码
public class FP{ public String name; public static String sname="34"; public int miss; public void fire(){ if(miss>0)sout<<"no" } else{} } public class run{ psvm(string args[]){ Fp f=new Fp(); f.name="s"; f.miss=1; f.fire(); sout<<f.sname } }
static修饰的属性有什么特点
application执行时为什么不能带后缀名
访问控制
public class Fp{ private String name; private int miss; private static FP f; private Fp(1,2){ name=1; miss=2; } public static Fp getInstance(s,m){ if(f==null; f= new fp(s,m); return f; } { psvm; Fp f; f.getInstence(s,m); }
消息的实质是引用向对象发出的服务请求
String与stringBuffer
s==t;s.equals(t)
创建线程
public class mythread extends Thread{ public static void main (String args[]){ Thread a=new mythread(); a.start(); } public void run(){ sout } } or public class mythread implements Runnable{ public static void main (string args[]){ mythreadd a=new mythread(); thread aa=new thread (a); aa.start(); } public void run(){ sout; } 多线程 class Mythread exxtends Thread{ public voi run(){ while(true){ } } } public class tresx(){ pulblic static void main (String args[]){ new myThread.run(); } } }class account{ volatile private int value; volatile private boolean ismony=false; synchronized void put(int i){ if(ismony){ try{ wait(); } catch(Exceeption ee){} } value+=i; sout"1"; ismony=true; notify(); } synchronized int get(int i){ if(ismoney){ try{wwait()} catch(){} } if(value>i)sout"2; value-=i; else i=value;value=0; ismoner=false; notify(); return 0; } } class save implements Runnable{ private account al; public save(accont a){ this.al=a; } public voidd run(){ while(true){ a.put(100); } } } class fectch implements Runnable{ private al; public Fecch(accont a)al=a; public void run(){ while(true){ al.get(100); } } } class test{ psvm; { account a=new; new Thread(new save(a).start()) new Thread (new fetch(a).start()); } }
Socket通信
考试是要求全篇默写的
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class TalkClient { public static void main(String[] args) { try { Socket socket=new Socket("127.0.0.1",4700); BufferedReader sin=new BufferedReader(new InputStreamReader(System.in)); PrintWriter os=new PrintWriter(socket.getOutputStream()); BufferedReader is =new BufferedReader(new InputStreamReader(socket.getInputStream())); String readline; readline=sin.readLine(); while(!readline.equals("bye")){ os.println(readline); os.flush(); System.out.println("Client"+readline); System.out.println("sever"+is.readLine()); readline=sin.readLine(); } os.close(); is.close(); }catch (Exception e){ } } } import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class TalkServer{ public static void main(String[] args) { try { ServerSocket server=null; try{ server=new ServerSocket(4700); }catch (Exception e){} Socket socket=null; try{ socket=server.accept(); }catch (Exception e){ } String line; BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter os=new PrintWriter(socket.getOutputStream()); BufferedReader sin=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Client:"+is.readLine()); line=is.readLine(); while(line.equals("bye")){ os.println(line); os.flush(); System.out.println("server"+line); line=is.readLine(); } os.close(); is.close(); socket.close(); server.close(); }catch (Exception e){ } } }