JAVA基础点汇总(三)

1. super.getClass()方法调用
2. String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
3. String和StringBuffer的区别
4. 线程
5. 在java 定义初始值为10的10次方的长整型变量 lvar 的语句怎么写?
6. 三种基本的流程控制结构是什么?
7. error和exception有什么区别?
8. java的标准输入和输出有哪个?
9. 多线程的并发和解决办法?
10. 对Ajax、JSON的理解


1. super.getClass()方法调用

   看下面这个类输出多少?

public class DateTest extends Date {


public static void main(String[] args) {
new DateTest().test();
}


public void test() {
System.out.println(super.getClass().getName());
System.out.println(getClass().getSuperclass().getName());
System.out.println(this.getClass().getName());
}
}
输出结果:com.hhaip.test.DateTest
          java.util.Date
           com.hhaip.test.DateTest
解析:我们定义好一个类以后,则这个类中默认一定含有一个getClass()方法(Object是任何一个类的基类,Object类中有个getClass方法),而这个类又继承了Date类,则又从Date那个类中继承了一个getClass方法,前面一个就好比我们自定义的一个getClass方法,后面一个是继承来的,那么super.getClass()其实是调用从父类中继承来的那个getClass方法,因为这个方法开始被隐藏了,this.getClass()调用的才是前面的那个getClass方法。如果想得到父类的Class,则需调用getSuperclass()方法。


2. String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
答:没有变。s开始指向了原来那个对象,那个对象的值为hello,当发生s = s + " world!"后,s指向了另外一个新的对象,对象的值为hello world!,原来的String对象的内容并没有改变,只是它的引用不再是s了。


3. String和StringBuffer的区别
答:JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。另外String实现了equals方法,new String(“abc”).equals(new String(“abc”)的结果为true,而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的结果为false。
  例:把1到100的所有数字拼起来,组成一个串。
StringBuffer sbf = new StringBuffer(); 
for(int i=0;i<100;i++)
{   sbf.append(i);   }
上面的代码效率很高,因为只创建了一个StringBuffer对象,而下面的代码效率很低,因为创建了101个对象。
String str = new String(); 
for(int i=0;i<100;i++)
{   str = str + i;   }
String覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题。
String的一些方法:
charAt(index);               求某个位置上的字符
lastIndexOf('');             求最后一次出现某个字符的位置
indexOf('');                 求第一次出现某字符的位置
indexOf(str, fromIndex);    从某个位置开始,第一次出现某字符的位置
length()  split  isEmpty  toUpper  toUpperCase  toLowerCase  contains("")     
4. 线程
答:实现一个线程有两种方法:(1) 实现Runnable接口,启动线程用Thread的start()方法 new Thread(ThreadFiled)。 (2) 继承Thread类,因为Thread实现了Runnable接口。
    线程同步有两种实现方法synchronized,wait与notify,用其锁定一个对象synchronized(Object){}。
    启动一个线程用start()方法,当线程启动之后,就会去执行run方法的方法体。
    sleep()和wait()的区别:
    sleep是线程类(Thread)的方法,导致此线程停止执行指定的时间,把执行的机会让给其它的线程,当达到指定的时间后,会自动恢复执行。调用sleep时,不会释放对象锁。wait是Object的方法,对象调用wait方法会导致本线程放弃对象锁,线程进入等待池等待,只有只对此线程的notify方法或针对所有等待池里的线程notifyAll方法才能唤醒这个线程。


5. 在java 定义初始值为10的10次方的长整型变量 lvar 的语句怎么写?
答:long var = (long)1e10;
    long varJ = (long)Math.pow(10,10);


6. 三种基本的流程控制结构是什么?
答:顺序结构、选择结构(分支结构)、循环结构


7. error和exception有什么区别?
答: error错误是java虚拟机出错,这种错误是不可修复的,比如说内存溢出和线程死锁。exception是程序语法或者语义等出错而导致的异常,这种错误是可以改正的,它包括运行时异常和编译型异常。
  异常的处理:(1)通过try{}catch(){}语句块来处理,把将要发生异常的语句放在try语句块中,如果发生异常,则执行catch中的语句。(2)通过throws关键字,抛出异常给这个类的上一层去处理(即抛给虚拟机处理)。


8. java的标准输入和输出有哪个?

答:java的标准输入有System.in,标准输出有System.out以及System.err,System.out是一个预先被处理过的PrintStream而System.in确是一个没有被处理过的InputStream,System.err和System.out一样,也是PrintStream。
同时System类还提供了重定向标准输入、输出、错误的方法:
    setIn();   setOut();   setErr();
例:
    public class OutInTest {
public static void main(String[] args) {

PrintStream out = null;   //定义一个打印流
try {
out = new PrintStream("d:/abc.txt");  //程序输出的内容在d:/abc.txt中
System.setOut(out);
} catch (FileNotFoundException e) {
e.printStackTrace();
}

System.out.print("输入是:");
Scanner sc = new Scanner(System.in);   //System.in输入流
String str = sc.nextLine();           //nextLine()返回值类型是String
System.out.println(str);
}
   }


9. 多线程的并发和解决办法?
答:ThreadLocal和Synchronized都用于解决多线程并发访问
synchronized关键字主要解决多线程共享数据的问题,ThreadLocal主要解决多线程中数据因并发产生的不一致。
它们的区别: synchronized的是利用锁的机制,使变量或代码块在某一时刻只能被一个线程访问,而ThreadLoacl为每一个线程都提供了变量的副本,是的每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多线程的数据共享。而synchronized却正好相反,它用于在多线程间通信时能够获得数据共享。
synchronized是用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。当然ThreadLocal并不能替代Synchronized,它们处理不同的问题域。synchronized用于实现同步机制,比TheadLOcal更加复杂。
线程的四个状态:就绪、运行、阻塞、结束


10. 对Ajax、JSON的理解
答:Ajax是一种异步通信技术,它基于javascript框架实现的,它的核心是XMLHttpRequest协议。它可以实现页面在不用刷新的情况下和后台页面进行数据交互,也就是说,页面不需要等待服务器的响应后才能继续操作,而是在服务器响应的过程中我们一样能对页面进行操作,同时js以DOM面向对象的编程方式,把数据写到页面上,JSON是和后台交互。
   JSON是一种轻量级的数据交换格式,XML是一种重量级跨平台的数据交换格式。JSON也是必须依靠javascript框架支持的,
JSON的两种表示结构:{} 、[],{}表示一个json对象,[]表示多个json对象的数组
定义一个JSON对象:var jsonVal = [{"key1":"value1","key2":"value2",...}] 如:[{"name":"张三","age":20},{...}]
解析一个json数组:for(var i=0;i<jsonVal.length;i++)
                  {
                      var nameVal = jsonVal[i].name;
                      var ageVal = jsonVal[i].age;
                  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值