Java基础课笔记
Java三大特性:
封装:
将变化隔离;
便于使用;
提高重用性;
提高安全性;
a) 对成员变量的封装
eg: 用数组构建一个队列或栈
b) 对成员方法的封装
eg: 求一个整型数的2、8、16进制数;
c) 对对象的封装
eg: 单例模型
继承:
(1)书写规则:<modify> class <name> extends <class name>
继承特性:
a) eg : public class Student extends People {...} ;Student 继承People的除了private的一切属性和方法(构造方法不能继承);
b) Java中是单继承,但支持多层继承;
c) 父类中private的不能继承;
任何java类及每一个java类都继承Object;
(2)继承特性:
a) 对成员变量的影响:
成员变量 ;
b) 对方法的影响:
方法可以覆盖;(也叫方法重写,区分方法重载);
c) 对构造函数的影响:
创建子类对象时,先调用父类构造函数;
Super函数只能出现在子类构造函数的第一行( 同this() );
子类中默认都有super函数;
子类方法中默认有super指针,直接调用;//属于非静态方法,同this 指针;
(3)什么时候用:
大量重复代码,可以向上抽取;
(4)抽象类(abstract ):
父类中是空的方法,用于子类继承实现;
(5)接口:
<public> Interface <接口名>
{
public static final int CONST = 10;
public abstract void fun (); //抽象方法;
}// 接口中只能有常量和抽象方法;
class Student impliments <接口名>
{
public fun(){
....
}
}
接口对象尽量少,以2到3个比较常见;
(6)final
a) 修饰类不可继承;
b) 修饰方法不可复写;
c) 修饰变量不可更改;
d) System.nanoTime;();
abstract class testTime{
final public long getTime(){
long start = System.nanoTime();
getCode();
long end = System.nanoTime();
return end - start;
}
abstract void getCode();
}
class getCode extends testTime{
void getCode() {
// TODO Auto-generated method stub
for(int i =0; i <1; i++);
}
}
(7) public protected default private;
多态:
1. 上转型对象(自动转换);
2.下转型对象(需要强转)
3.动态绑定:(函数没有private,fianal,static修饰)
instenceof :判断是否是类的对象;
多态条件:
多态体现在子类和父类之间;
必须有复写的方法;
内部类
匿名内部类: new Object() {
.......
}; //new 的Object 的内部类;
多用于传参;
包头不包尾;
/*****************************************************************************/
Java背景:
1. J2ee,(企业版)包含servlet jsp技术;
2. Jre, ——java运行环境;
3. Jdk,——java开发工具集;(包含jre)
JDK1.1 JDK1.2 JDK1.6(6.0) JDK1.7(5.0) J2EE、J2ME、J2SE
1. Java源码,字节码文件,
a) Javac编译产生.class文件,
2. Jvm——java虚拟机;
3. Java垃圾回收机制(GC);
4. Jdk安装;-》javac环境配置----》java代码目录配置;
Java基本概念:
1. 基本数据类型;
a) 数值型:byte short int long(默认值0); double float(默认值0.0 0.0f);
b) 布尔类型:boolean(默认false)
c) char 两个字节;char ch = “你”;(默认)
2. 引用数据类型:数组,类,接口;(默认空null)
注:float f = 100.0 错误表达,100.0默认double型,转换为float型精度缺少;
1. 构造函数;
默认也有构造函数,无参无返回值;
给成员函数初始化;
在创建对象的同时被调用
默认构造函数随着自定义函数的定义而消失;
2. 函数重载;
a) 函数名一样,参数不一样(个数不一样,类型不一样),根据参数识别;
3. static 关键字
a) 静态成员
只要加载类 就加载进内存;
class people{
Static String type = “ren”;
Int age;
}
Main()
{
People.type;
}
加static的情况:
属于类的特性;
属于共享资源;
b) 静态方法
当方法中没有操作普通的成员变量和成员方法时,即可以加static;
静态方法中不能操作普通成员变量;//
静态方法中不能使用this
4. This关键字
class people()
{
Sring name;
Int age;
People(Sring name1, int age1)
{
This.name = name1;
This.age = age1;
}
}
在stitic修饰的方法,不能调用this; 调用对象没有产生;
5. this()
a) 出现在构造函数中;
b) 出现在构造函数中第一行;
6. 自动装箱、拆箱
1. 自动类型转换 (扩大转换)
在程序中已经定义好了数据类型的变量,若是想用另一种数据类型表示时,Java
会在下列的条件皆成立时,自动做数据类型的转换:
a)转换前的数据类型与转换后的类型兼容。
b)转换后的数据类型的表示范围比转换前的类型大。
2. 强制类型转换
/********************************补充笔记*************************/
Object 类;
父类引用指向子类;编译时检查父类中,执行时先调用子类;------------------动态绑定;
匿名内部类,用于传参;
String str1 = “hahah”;——————hahah字符常量区,不可变;
/*************************************************************/
异常
Try{}
Catch(){}语句;
Throw抛出异常;
线程
MyThread th = new MyThread();
th.start();
自动调用run方法;
可以手动调用。th.run();
调用接口run;
匿名内部类;
t3.start();名内部类:工程中经常运用,用于传参;
临界资源的访问:
在run()中加锁;
两个抢占临界资源的线程加锁对象必须一样,针对同一个对象;
a)锁加在代码段上;——同步代码
b)锁加在方法上;——同步函数,用this锁;(非静态锁用thi锁,静态的用fun.class对象)
加锁技巧;
线程挂起;People.boj.notify(); 叫醒另一个线程,
集合
集合的遍历——迭代器
迭代器:将集合的引用拷贝一份给迭代器;
常用集合操作方法之一;
hashMap();
Set ss = mp.entrySet();
Iterator it = ss.iterator();
While( it.hasNext() ){
Map.Entry map = (Map.Entry)
}
懒汉式
饿汉式
单例模型(23种设计模型)
文件IO
字节流:
inputStream
outputStream
字符流:
Reader
Writeer
记:windows 换行符 :’\r\n’