首页 > 代码库 > java学习笔记

java学习笔记

 

一、javaSE

1、java生成字节码(.class运行在JRE上)文件,所以具有跨平台性。

   .java->.class(编译)   .class运行在虚拟机是解释过程

   一种半编译,半解释语言,编译效率更高(一齐翻译)

   编译命令javac   执行命令java

2、编码规范:变量、方法:首单词字母小写,之后单词首字母大写

          类、接口:每个单词首字母大写

          包名全部小写,全局变量全部大写

          局部变量:必须有初始值,方法被调用是产生,调用结束消失

     //System.out.println("i="+i)

3、布尔值只能用true and false不能用0和1

4、控制语句

   if(){}   if(){}else{}<==>..?..:    if..else if...else  或者三种的嵌套 

   String result=score==100?"看世界杯":“在宿舍反省”

   int age=23;

   if(age<0||age>250)

   {

    System.out.println("不可能年龄");

   } 

   else{

             if(){}

             else if(){}

             else{}

}

  Switch中只能是常量或常量表达式或枚举类型

 Char c=’Y’;  String result=””;

Switch(c)

{

   Case ‘Y’:

   Case ‘y’:

   Result=”YES”;

   Break;`

}

For(初始化:条件部分:迭代部分){//循环体}

For的增强版  for(元素类型:集合)

For(int item : arr){system.out.print(item+”\t”)}

5、堆中的数据需要垃圾回收机制回收

二、面向对象

  

1、类:

字段:

   将字段封装,用get,set

方法

    声明:[访问权限] 返回值 方法名(参数) {方法体}

    Public void ran() { system.out.println();}

    Public String eat(String tools,double money){}

构造方法(构造器)

    与类同名,没有任何返回值

   

Java只有值传递,无引用传递(一种是传值,一种是传引用)

2、封装

三、java高阶

1、类之间的关系

继承、泛化(is—a)

     Extends

     子类中的成员:

1、         继承父类中的可见的成员(字段、方法)(构造器不能继承)

2、          子类中所特有的成员(字段、方法)

3、         重载父类的成员(方法)

重载的条件

a、                                       方法名称相同,参数的列表不同(参数的类型、个数、顺序)

b、                                       返回值无所谓

c、                                        访问权限无所谓

d、                                       发生在同一个类当中,或者父子类(前提)

避免歧义重载(否则报编译错误)

Void int ma(int a ,double b)

Void int ma(double a ,int  b)

 Ma(23,24);

构造器重载

4、         覆盖父类的成员(方法)

覆盖的条件:

A、        方法名称相同,参数列表相同

B、         返回值必须相同

C、         子类的访问权限大于等于父类的访问权限

D、        子类只能抛出父类的异常类或者父类的异常类的子类

E、         覆盖只能发生在父子类之间(前提)

Class Person{

   Int age;

String name;

Public String show()

{

 Return age+”\t”

}

}

Class Student extends Person

{

   Double score;

Int id;

String school;

}

Main(){

   Student stu=new Student;

}

This用法

   This.成员(方法)

   This(参数列表)调用本类的其他构造方法 ,必须放在第一句

   Super.方法(成员)调用父类的构造方法

   Super(参数列表)必须位于子类构造方法的第一句

多态:父类的变量指向一个子类的实例

  Animal dog =new dog();

   自动转换:小—>大  子—>父

强制转换:  父à子

     Parent p=new Child();

     Parent p1=new parent();

     Child c=(child)p;

Child c1=(child)p1;报错,以为p1原来是parent类型,类的强转只针对于多态 (可以用insteadof判断)

   Static:(类名.静态成员调用)与对象无关,只与类有关,所以不能用this,super关键字,不能修饰局部变量,也就是方法里面不能用static关键字

       字段:所有对象共享这个字段

       方法:静态方法能够访问静态成员,不能直接访问非静态成员

             非静态的成员可以直接访问静态成员和非静态成员

       代码块:

             只执行一次

       内部类:

   Final:(基于数据的保护)

       变量:必须有初始值,并且不能第二次赋值

       方法:不能被重写(覆盖)

       类:不能被继承

组合(has---a)

     合成:个体和整体,生命周期相同

     聚合:个体和整体的关系,生命周期不同

     关联

实现、接口(is---a)

依赖(use---a):一个类作为了另一个类的参数或者返回值

抽象方法:abstract

只有方法声明,没有方法的实现,抽象方法只能在抽象类中

抽象类有构造器,但抽象类没有对象,但只有在子类产生对象时,调用父类的构造器

抽象类能有父类,且可以有非抽象父类

Abstract:

   与Static  private  final关键字永远不能同时使用

Interface:(接口是规范)有变数的地方都应该加接口

    不能产生对象,没有构造器

    弥补了单继承的不足

    类和接口之间可以是多继承

    接口和接口之间也可以多继承

       Interface m1;interface m2;

       Public interface m3 extends m1,m2{}

    字段:公开的静态的常量字段

方法:公开的方法,默认字段都是public

Public interface Runner{

   Int i=12;

Void ma();//默认是public,在接口中

}

Class Person implements Runner{

    Void ma(){};//类中默认是private

   改成public void ma(){};

}

 Object类:

   Equals:除了包装类,string,date判断数值之外,其他都是引用判断,判断是否指向同一块内存地址。

  如果重写了equals就必须重写hashcode()

   ==:可以判断数据也可以判断引用

1、异常处理
Throwable:(类)常见的接口,jsp9个内置。。。
Exception:(异常)
1、RuntimeException(运行异常):JVM可以自动捕获
2、检查异常:JVM不能自动捕获,需要显示的处理
3、throws://跟在方法后面
4、throw//跟在句子后面
if(age<0||age>250)
{throw new Exception("年龄异常")}
5,、自定义异常
extends Exception
extends
class AgeOutBoundsException extends Exception
{
public AgeOutBoundsException(){}
public ......
}
Error:(错误)
a、 try。。。catch
try{
system.out.println(a/b)
}
catch(ArithmeticException ex)//一个try可以有多个catch,越详细的类越写在前面
{
ex.printStackTace();
//return;//即使有return,finally中代码也执行
}
finally{ //有无异常finally都执行
system.out.println("finally");
}
b、throws谁调用谁处理,main方法也可以抛出异常,抛给虚拟机
异常抛出时,父类抛出的异常更大一些,子类不能抛出比父类更大的异常,父类抛异常,子类可以不抛( 只限运行异常)
2、常见类
String
Stringbuffer线程安全的,效率低,需要加锁
Stringbuilder 线程不安全的
split:按照一定规则切割字符串
substring:取字串
toCharArray:转换成数组
trim:可以去掉字符串前后的空格
valueof()所有的类型都能转换成字符成类型
append:追加字符串 str.append("1212").append("2333")可以连续追加
delete():删除也可以联系删除
insert():插入,也可以连续插入
3、集合(只能存引用类型,即都是对象)
Set:集 无序的,不允许重复()
HashSet(无序的) 、TreeSet(有序的) 只能通过迭代器进行遍历
List:列表 有序的,允许重复的
ArrayList(物理内存是连续的,线程不安全的)、LinkedList(类似于C++中的链表,物理内存是不连续的) 、Vector(底层存储也是数组,线程安全的)
List list=new Arraylist();
list.add(12);//这个步骤自动将12装箱成integer类型
for(Object obj:list)遍历
或者用迭代器遍历
Map:字典 键值对的形式
Map map=new HashMap();//Hashtable()是线程安全的,但不能使用null作为键和值
map.put(1,"aaa"); Map<integer,String> map=new HashMap<integer,String>();
map.put("a","bbb");
map.put(12.34,"ccc");
map.put(null,null)
Set set=map.keyset();
Iterator it=set.iterator();
while(it.hasNext())
{
Object key=it.next();
String value=http://www.mamicode.com/(String)map.get(key);
system.out.println(key+":"+value);
}
集合和数组的区别:数组大小是固定的,里面存的可以是基本数据类型也可以是类对象,集合只能存引用对象,不能存数据

4、泛型:类型参数化

泛型类
泛型接口 List<String> List=new ArrayList<String>();
Iterator<String> it=set.iterator();
泛型方法
class GenericDemo
{
public <T>void swap(T obj1,T obj2)
{
T temp=obj1;
Obj1=obj2;
Obj2=temp;
}
}
GenericDemo gd=new GenericDemo();
gd.swap(1,2);
泛型类:
class GenericClass<T>
{
private T name;//类中的数据类型不确定
public T getName();
}
GenericClass<String> gc=new GenericClass<String>();

5、多线程
线程:
a、extends Thread
b、implement Runnable(一般常用这个)
public ThreadDemo implements Runnable
{
void run();
}
synchronized 用锁防止多线程改变同一个内存域

6、数据库,Oracle

java.sql.Date包下对应Oracle的时间