


7、
方法执行后,之前分配的空间(在栈中,因为方法中变量---局部变量,所占的空间都是栈空间)就立马消逝了。
8、
类的方法只是一段代码(所有的对象共享),只有在调用的时候才会在内存各个部分分配空间。
9、
非静态方法是针对每个对象进行调用
10、
堆内存中,成员变量也可以指向堆内存中的其他堆。如下图:o是引用类型
图4

















图19、20



如果extends了抽象类后不想实现其中的抽象方法的话,可以把自己也声明成抽象类,自己的方法也是抽象方法,然后把实现交给自己的子类就行了。

public static void main(String[]a){
A a=new A();
a.i=9;
}
}
class A{
final int i=9;
}
编译报错,说明final的成员变量不 能被试图改变即使数值大小并没有改变。
例(2)
public class Test{
public static void main(String[] args){
A a=new A();
a.test(9);
}
}
class A{
final void test(final int i){
i=9;
}
}
编译报错:d:Test.java:12: 不能指定最终参数 i
i=9;
说明:形参(局部变量)被final声明后不能被改变!
29、
在c++中,允许多继承,但是继承的多个父类之间可能会有重名的属性,所以会出现错误。
在java中只能允许单继承,这就避免了这种错误,虽然可以实现多个接口,但是接口里的属性是static的,所有的实例共享的。
图25

图26、27、28



30、
接口可以继承接口,类继承类。
31、
图29



public static void main(String[] args){
A a=new A();
a.test(0);
}
}
class A{
void test( int i){
int j=4/i;
}
}

public static void main(String[] args){
A a=new A();
a.test(0);
}
}
class A{
void test( int i)throws Exception{
int j=4/i;
}
}
出错信息为:
图34

public static void main(String[] args){
A a=new A();
a.test(0);
}
}
class A{
void test( int i)throws RuntimeException{
int j=4/i;
}
}
出错信息为:
图35






36、
如果异常发生了,则后边的语句就不再执行了。
37、
图41


图43


39、
如果元素为引用数据类型的话,内存变化如下:
当执行Date[] days;后变化如下图:
图45






42、
数组排序一:选择排序,即每次把第i位后边(包括第i位)最小的数放到第i位上,如下:
图51





总结:冒泡和选择的巧计方法:冒泡是第二层循环体内数据的比较,选择是第一层数据和第二层数据的比较。
44、
数三退出问题:有500个人拉手围成一圈,从第1个人开始数数,如果数到3就退出,下个人继续从1开始数数,求最后剩下的人是谁?
图56






46、
二维数组
图62、63


public static void main(String[] args){
int a[][]=new int[3][];
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+",");
}
结果为:
图64

public static void main(String[] args){
int a[][]={{1},{22,3}};
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+",");










图74、75



55、
求字符串中大写字母、小写字母、非字母的个数
图77



56、
求字符串“java”在字符串中出现的次数
图80、81







58、
注意Integer.parseInt(s)和Integer.valueOf(s)的区别:前者返回int类型,后者Integer
即:后者的返回值=new Integer(Integer.parseInt(s))










注意:lastModified()方法返回值long类型的,因为计算机存的是从开始到现在的毫秒数。

注意:在linux里是“/”,但是在windows里“/”或者“\”都行!!为什么是“\”呢而不是“”呢,因为“\”是“”的转移字符!!

64、
枚举类型
图99

65、
容器
图100







图107














图121 122





所以在使用集合的时候最好使用泛型!!!






注意:write(byte[] b)和read(byte[] b)比write(int b)和read(int b)性能高,write(byte[] b)与read(byte[] b)是每次都是操作一个数组级别的数,而不用每操作一个字节就和硬盘打交道一次。
77、
字节流有时候肯能会造成读一个汉字只读一一个字节即只读一个汉字的一半,所以可用用字符流。
图133 134 135 136









注意:系统只能自动建文件,不能自动建目录。















85、
线程
public class Thread extends Object implements Runnable:Runable接口只定义了run方法。
图157 158 159




最好使用接口:因为extends就写死了,因为只能单继承,就不能继承其他类了。




图165

图166

88、
正常的让线程结束应该如下图,而不是用interrupt和stop方法。
图167




90、
请模拟死锁:
图171 172


91、
一道面试题:下图,如果线程t锁住m1(里面有b),问另一个线程(main)是否能访问m2(里面有b)。
图173



92、
生产者消费者问题
模拟如下:
图176 177 178 179




wait只能在synchronized的情况下使用。在线程阻塞时(即馒头吃完或者馒头生产的超过容量)使用wait。
notify和wait配套使用。如果是多个线程的话就必须用notifyAll了。
Object类中又一个wait(),在运行状态中,线程调用wait(),此时表示着线程将释放自己所有的锁标记,同时进入这个对象的等待队列。
等待队列的状态也是阻塞状态,只不过线程释放自己的锁标记。
Notify()
如果一个线程调用对象的notify(),就是通知对象等待队列的一个线程出列。进入锁池。如果使用notifyall()则通知等待队列中所有的线程出列。
一、sleep属于Thread类的方法,wait是Object的方法
二、在运行状态中,线程调用wait(),此时表示着线程将释放自己所有的锁标记,同时进入这个对象的等待队列。等待队列的状态也是阻塞状态,只不过线程释放自己的锁标记。
而sleep是:
sleep是线程被调用时,占着cpu去睡觉(但是占用索标记即占着对象),其他线程不能占用cpu(不能访问对象),os认为该线程正在工作,不会让出系统资源(对象),wait是进入等待池等待,让出系统资源(释放锁标记),其他线程可以占用cpu,一般wait不会加时间限制,因为如果wait的线程运行资源不够,再出来也没用,要等待其他线程调用notifyall方法唤醒等待池中的所有线程,才会在进入就绪序列等待os分配系统资源,
93、
网络编程不等于网站编程!!!
网络编程比如:,魔兽争霸等
网站编程:http html css等
图180

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/3175.html