@传智博客 张孝祥老师Java基础视频
**************************************************************************************
Author:lxy_1015@126.com
Java基础教程1
====================================================
1.一个Java文件中最多只能有一个public的类,因为Java文件的文件名必须与
其中public 类的名字相同。
2.javac命令把.java源文件编译成Java字节码文件,.class文件。这个文件中
包含里Java源文件中pulbic类的信息。
java命令执行时,后面的参数不是字节码文件,而是对Java文件中的类进行解释。
a.java
javac a.java
所以:执行java a
而不是 java a.class
Java基础教程2_2
=====================================================
1.float在内存的存储形式
2.Java内存中的堆和栈
子函数调用的是开辟的内存空间位于栈内存里。
用new创建的数组及对象的实体存放的堆中,而对象引用(堆的内存地址)存放在栈内存里。
例如:int []x = new int[100]; 或者
int []y;
y = new int[100];
数组的引用x里面存放这数组的首地址,位于栈内存里。而真正的100个int数据则在x里那个地址
存放的位置,在堆内存里面。
当x生命周期结束,或者x=null;即对象引用不再指向堆内存。那个堆内存也不会释放,变成垃圾,
直到将来一个不确定的时间,由Java垃圾回收器将其回收。
Java基础教程3
=====================================================
1.== 与 equals两个比较之间
== 用于比较值是否相等,equals 用于比较两个对象的内容是否相等
举例
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
此时str1与str2这两个引用句柄分别存放着两个对象的首地址,对象的引用句柄是在栈内存里的
但是对象是在堆内存上的。因为两个“abc”是两个不同的对象,所以str1与str2里面放的地址是不
一样的。== 运算符比较的是值,也就是说str1与str2的值是不同的。但内容相同。
str3与str1指向同一个对象,所以他们的值(也就是存放的对象的地址)是相等的,内容也是相同的,
所以
str1 == str2 的值是false
str1 == str3 的值是true
str1.equals(str2)和str1.equals(str3) 的值都是true。
2.设计类的时候追求:强内聚,弱耦合
3.垃圾回收的过程
finalize()方法是被垃圾回收器调用,回收对象的资源。但是不确定垃圾回收器什么时候启动。
也许直到程序运行结束,垃圾回收器都没有启动。finalize()也没有被执行。
System.gc()方法,唤起垃圾回收器,回收垃圾。这个可以控制垃圾回收器。
皮之不存,毛将附焉:所以构造方法和析构方法调用的时候对象都是存在的。
如果对象都不存在了,怎么调用它的方法呢。
4.形参与实参
a.基本数据类型作为参数传递时副本传参,即只修改形参而不修改实参本身的值。
b.如果对象的引用作为参数传递。传的是对象的堆内存地址,把地址复制一份传给这个方法作为参数,
此对象就具有了两个引用句柄,所以对形参对象的修改就是对实参对象的修改。
c.数组作为参数是,情况跟传递对象当作参数是一样的。
5.static在类中修饰的成员变量是所有对象共同拥有的,任何一个对象对其进行修改,其他类再访问的
时候都是修改以后的值。
6.怎样保证一个类在程序中只能创建一个实例对象:单态设计模式
class pason
{
static Pason p = new Pason();//必须是静态的,不然会循环开辟内存,直到吃完内存
private Pason(){};//构造方法要设计成私有的
static public Pason getObj()//提供给外部的接口
{
return p;
}
}
外部通过getObj()方法获得对象,无论调用多少此,p指向的对象是静态的,所以他们都是同一个对象
的多个引用而已
Java基础教程4
=====================================================
instanceof关键字
a是一个类的对象,B是一个类
a instanceof B
如果a是B的一个对象或子类对象。则上式值为true.
Java基础教程5
=====================================================
多线程
1.继承Thread类:
定义一个类A extends Thread
重新其中的run()方法。
创建A的对象a。
a.start();//启动线程
a.setDeamon(true);//后台运行线程
a.join();//合并线程到主线程,变回单线程模式
a.join(1000);//合并1秒后再分成两个线程同时运行
2.实现Runnable接口:
定义一个类A implements Runnable
重新其中的run()方法。
创建线程对象Thread tt = new Thread(new A());
tt.start();//启动线程
使用与多线程的程序处理同一资源的情况,比Thread要灵活很多
举例四个售票线程共同卖100张票。
3.线程安全
String str = new String("");//锁其标,全局变量
synchronized(str){......}//同步代码块
或者定义一个子函数用synchronized修饰
public synchronized void sale(){......}//同步函数