码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA 笔记 (总)

时间:2016-04-19 12:22:36      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:

model 1 get start

1.安装java环境
1.下载
2.安装:
1.windows
2.linux
3.配置环境变量:
PATH:系统常用命令的搜索路径。
CLASSPATH:指定类加载的路径
JAVA_HOME:指定jdk的安装目录

    windows:计算机---右键---属性---高级--环境变量
        JAVA_HOME:jdk的安装目录
        path :%JAVA_HOME%/bin;xxxx;xxxxxx;
        classpath:.;
    linux:
        1.系统级别:/etc/profile
        2.用户级别:~/.bashrc
        export JAVA_HOME=/opt/jdk1.7.0_07
        PATH=$JAVA_HOME/bin:$PATH
        CLASSPATH=.:

        export PATH CLASSPATH

2.jvm 虚拟机
1.编译
java程序 ——- 》 字节码(bytecode)

2.运行
    字节码文件 ------ 》jvm------》cpu

3.垃圾回收机制:
java系统线程,线程级别低。
通过java.lang.System.gc()/java.lang.Runtime.gc()来建议垃圾回收器执行。

4.java工作流程:
1.编译: javac
源文件 ——- bytecode(字节码)
1.源文件(.java)
2.字节码(.class)

2.运行: java
    1.类加载:双亲委托机制
    2.

5.源文件:
java程序以类(接口,抽象类,枚举)为基本单位
1.以.java结尾的
2.源文件的名字一定要和public修饰的类(接口,枚举)的名字保持一致
3.一个源文件中最多智能由一个public修饰的。。。。
4.如果源文件中定义package,那么package的定义必须出现再首位。
note:
[package xxxx];
[import xxx.xxx.xxx];
[import ……..]
………..
[public] class className{

    }   

6.import:
String
System
note:java.lang包下的类都不需要import
7.package:
1.编译过后的字节码文件一定存放在以package命名的目录结构之下
2.运行时类的名字一定时packageName+className
com.briup.ch01.HelloWorld

javac -d dirName srcFile
javac -d . srcName
java -cp bin com.briup.ch01.HelloWorld

8.class loader
1.启动类加载 jre/lib/rt.jar
2.扩展类加载 jre/lib/ext/ *.jar
3.系统类加载 classpath

4.网络类加载

9.java中常见的package结构:
1.java.lang.*; 基础包,这个package下所有的类都不需要import。
2.java.awt.;javax.swing.;java.awt.event;
图形界面/事件处理
3.java.io.*;
输入和输出
4.java.net.*;
网络编程
5.java.util.*;
工具类

10.java api


model 2 标识符,关键字,数据类型

一、java中的注释
可以出现在任何想出现的位置。
1.单行注释
语法://comments
结束:遇到换行符,注释结束

2.多行注释
    语法:/* comment */

/*……
/*
adsfasdfa
//adsfadf
*/
3.文档注释
语法:/** comment
@since
@version
@author
@param
@return
@throws
@see
*/

javadoc -d dirName -author -version srcFile [@file]

二、java简单的语法规则
1.空白(空格,回车,换行,制表符)是无关紧要的。
2.一条语句的结束必须使用;标识
3.java中使用{}组织代码。java中不存在孤立的代码快
三、标识符
类名,变量名,方法名等都称之为标识符。
命名规则:
1.以字母,_或者,
2.没有长度限制
3.严格区分大小写
4.不能是java中的关键字和保留字

    保留字:goto const
          true,false 是boolean类型的字面值
推荐命名规则:
    1.类名(接口,枚举)首字母大写,如果由多个单词组成,每个单词的首字母都大写。 HelloWorld
    2.方法名,变量名---首字母小写,如果由多个单词组成,除第一个之外的单词的首字母都大写。add
    3.如果是常量名----全大写,多个单词之间使用_分割
            MAX_VALUE
    4.表意性一定要强

四、数据类型
1.基本数据类型
note:1.八种
2.都可以直接赋字面值
1.布尔类型(boolean):
true,false
2.字符类型(char):
1.无符号的16位的整数 0—2^16-1
2.字面值一般使用‘’括起来 char c = ‘中’;
unicode —–> char c = ‘\u4e2d’;
十六进制 —–》 char c = 0x4e2d;
3.java中的转义字符 : \
\u
\r:回车
\n:换行
\t:制表符
4.native2ascii

    3.数字类型:
        整型:byte,short,int,long
            note :
                1.默认的整数类型为int类型。
                2.所有的整数类型都分别可以使用十进制,八进制(0),十六进制(0x)表示
                3.long一般加后缀L/l
        1)byte . 字节类型
            占8位  -2^7 --- 2^7-1
        2)short 短整型
            占16位    -2^15 --- 2^15-1
        3)int 整型
            占32位    
        4)long 长整型
            占64位    

        浮点型:float ,double
            1.默认的浮点类型时double    
            2.float一般加后缀f/F
            3.double一般加后缀d/D

2.引用类型(类类型):java中每定义一个类(接口,抽象类,枚举)都相当于声明了一种类型。
    引用类型赋值使用new关键字
    例如:java.lang.String
         java.lang.System
         java.util.Date     
    Date d = new Date();
 字符串类型:String 是特殊的类类型,可以直接使用""赋字面值。     
    String s = new String("abc");
    String s = "abc";

类型转换:
1.隐式类型转换(符号位扩展):
1.数字常量在没有超过类型所能表示的最大范围时,自动转换。
2.从小范围—-大范围的转换
byte —-> short —->int —->long
float —-> double
3.整型—》浮点型
boolean true false
char 无符号的16位的整数
byte short int long
8 16 32 64
float double
32 64
2.显示类型转换(强制类型转换)
1.大范围到——小范围
2. byte<—>char
char<—>short

五、变量:
概念:标识值有可能会发生变化的标识。
语法:DataType varName [= value];
分类:
1.数据类型:
基本类型变量: = 字面值
int x = 10;
引用类型变量: = new DataType();
String s = new String(“abc”);
Date d = new Date();
2.
局部变量:
声明位置:方法体部
要求:使用之前必须显示初始化
作用范围:从声明开始,到所在代码块结束
存储位置:栈区
实例变量:依赖于实例对象的存在才存在的变量
  声明位置:类体部
特征:会使用默认初始值进行初始化
引用类型 boolean char byte short int long float double
null false ” 0 0L 0.0
   作用范围:
使用:

六、类和对象
1.对象:
1.万物皆对象
2.对象都是具体的存在,是唯一
3.对象都有状态,对象可以通过自身的行为改变自己的状态
4.对象时类的实例

张三 名字 年龄 性别 身高 体重
张三 18 男 175 70kg
张三在踢足球

2.类
  1.对象的模板,对对象的抽象
  2.抽象对象所具有的所有的特征和行为
    特征: 变量
    行为: 方法
public returnType(void) methodName(DataType param1,....){
    ......
}

面向对象的编程步骤:
1.抽象类:抽象对象的共有特征和行为。
2.实例化对象:
Class c = new Class();
3.操作对象的属性和行为

人{
特征:名字,性别,年龄
行为:eat , sleep
}

class Person{
String name; // 实例变量
String gender;
int age;
public void eat(String foodName){ //实例方法
………
}
public void sleep(){
……..
}
}

Person p = new Person();
p.name = “zhagnsan”; //对象名.变量名
p.age = 18;
p.gender = “男”;

p.eat(“苹果”); //对象名.方法名(param,…);

七、jvm的内存分配
1.代码区
常量池
静态区
2.栈区 : 保存方法调用过程
3.堆区 : 对象


model 3 表达式和流程控制

一、操作符

1.算数运算符
    +  -  *  /  %
    BigDecimal
    note 
    1.计算机没办法精确的表示浮点数,如果需要进行浮点数的精确运算(一般应用于商业计算),Java中提供java.math.BigDecimal对象来进行浮点数的精确运算。
    2.参与+运算的操作数如果遇见字符串,那么+自动准换成字符串拼接运算符。
2.自增 自减
    ++   --
     int a = 1,b;
     b=++a; 先将a=a+1,然后将a的结果赋值给b
     b=a++; 先将a的值赋值给b,然后再让a=a+1; 
    ++:自增,
    --:自减,
5.比较运算符
     >  < >= <= == != instanceof 

    a instanceof A
    判断a这个对象是否属于A这种类型。
3.位移运算符
    >>:带符号右移,将操作数向右移动n位,低位舍弃,高位使用符号位补全

-5>>2
-5 : 补码 = 负数的绝对值求反+1
0000 0101
1111 1010
1111 1011
1111 1110
原码 = 补码求反+1 ===》结果是负数的绝对值
0000 0001
0000 0010
<<:左移,将操作数向左移动n位,高位舍弃,低位用0补全

:无符号右移,将操作数向右移动n位,低位舍弃,高位补0
-5>>>2
1111….1011
001111…10
4.位运算符
& | ~ ^
& : 1&1 = 1
5&3 = 1
0101
0011
| : 0|0 = 0
5|3
~ : ~1=0 ~0=1
~1 = -2
0001
1110
~5 =
0101
1111…1010

    ^ : 相同为0,不同为1

5^3 = 6
0101
0011
0110
6^3 = 5
int a = 3, int b = 5;

6.逻辑运算符
    &&  ||
    boolean_A&&boolean_b:
    &&:要求前后两个表达式的结果都为true,最终结果=true
    ||:只有两个表达式结果都位false,最终结果=false
    &
    |
    相同点:都可以做逻辑运算
    不同店:
        1.&,|既可以做位运算,有可以做逻辑运算,但是&&,||只能做逻辑运算
        2.&&,||在做逻辑运算式有优化原则(短路原则)
  &&:如果第一个表达式结果位false,第二个不再参与运算
  ||:如果第一个表达式结果为true,第二个不再参与运算

7.条件运算符
    boolean_expression ? trueV:falseV;
8.赋值和复合赋值运算符
    = += -= *= /= ..... 
  note 
    1.= 赋值
    2. += 复合赋值运算符
       a+=b; ====> a = a+b;
      复合赋值运算符会自动进行数据类型转换

数据类型转换:
1.隐式数据类型转换:
1.byte,short,char 在运算过程中会自动转换成int参与运算
2.如果参与运算的两个数属于不同类型,小类型会自动转换成大类型参与运算。

二、表达式:
由操作数和操作符按照一定的规则组成的序列

计算结果为boolean值的表达式称之为布尔类型表达式

三、数据类型转换

四、流程控制

1.顺序流程
2.条件控制:
    if  else if   else
    if(boolean_exp){
        block;
    }
    if(boolean_exp){
        block A;
    }else{
        block B;
    }

    if(boolean_exp){
        block A;
    }else  if(boolean_xp2){
        block 2;
    }....else if...{

    }

    if(boolean_exp){
        block A;
    }else  if(boolean_xp2){
        block 2;
    }....else if...{

    }else{

    }

练习:根据用户传递的运行时参数(代表年龄),判断这个年龄值属于什么阶段(儿童,少年,青年,壮年。。。。)
3.选择控制: switch case
switch(varName){
case val1:
block A;
[break;]
case val2:
block B;
[break;]
…….
default:
block;
[break;]
}
note:
1.jdk5.0之前,switch可以选择的变量类型byte,short,char,int
jdk5.0 … 加入了对enum 枚举的支持
jdk7.0 加入了String
2.case语句之后的代码块中如果没有break,那么只要其中一个case语句能够 匹配上变量的值,那么之后所有的case语句都会被自动屏蔽,case中的所有代码顺序执行。
3.default可以出现在switch语句的任意位置,但是匹配级别低于case。但是如果default语句出现再非最后的位置,一旦匹配上,并且default代码块中没有遇见break,那么接下来所有的case代码块顺序执行。直到switch语句结束或者遇见break;
4.break用来跳出switch语句。
练习:根据用户传递的年份,和月份值,判断当前月份有多少天。
四年闰而百年不闰,或者四百年闰

java.util.Scanner
Scanner sc = new Scanner(System.in);
int val = sc.nextInt();
switch(month){
case 1:
case 3:
System……31
break;
case 2

    default:    
}

4.循环控制
    一般指代码块在满足一定条件之下重复执行。
     note:
        1.循环开始的条件
        2.循环结束的条件(循环执行的条件)
        3.循环状态的改变(向着循环结束的方向)
   1.for
    语法:
        for(init_exp;boolean_exp;status_change){
            循环代码(需要重复执行的代码); block;
        }
    note:
     1.init_exp--->boolean_Exp---->block;---->status_change--->boolean_exp---->block---->status_change---->boolean_exp....
     2.for循环小括号中指定的三个表达式可有可无,但是;必须存在。

for(int i = 1;i<=10;i++){
System.out.println();
}
1—100之间所有数的和
1+2+3+4.。。+100
int sum = 1;
for(int next = 2;next<=100;next++){
sum = sum + next
1 + 2
3 + 3
}
练习 1: 打印十进制数的二进制表现形式。
10
0000 …. 1010

   2.while:当型循环,或者也叫前测试循环
    语法:
        1.init_expr
        while(boolean_Exp){
            block{
                2.循环状态的改变
            }
        }
    note:线测试循环条件是否满足,然后执行循环体,所以如果初始条件不满足循环执行条件,循环体一次执行机会都没有
   3.do...while:直到型循环,或者也叫后测试循环
        //循环初始的条件
        do{
            //循环状态的改变
        }while(boolean_exp);

循环是可以嵌套的。

*




练习 : 根据用户输入的层数(n),打印响应的金字塔结果
控制打印层数(重复):
1.循环初始状态 n = 1
2.循环退出的条件(只打印用户输入层数)n<=层数
3.循环状态的改变 n++
4.定义循环体{
System.out.print(” “){/重复打印 ,循环
1.循环开始 x = 1
2.循环退出 x<=总层数-n
3.状态改变 x++

    }
    System.out.print("*"){
        1.开始
        2.退出  2×当前层数-1
        3.状态改变
    }

总4 层 space *
1 3 1
2 2 3
3 1 5
4 0 7
}

五、break continue
break:退出当前循环体
break lable : 退出lable所指定的循环
continue:结束本次循环,进入下一次循环
continue lable:结束当前循环,进入lable所指定的循环

model 4 Array 数组
{1,2,3,4,4}

一、数组:
1.一组具有相同数据类型的数据的集合。
2.数组是对象:
1.属性:
length,数组中的每一个值都是
2.对象通过new操作创建。
3.数组对象创建时一定显示或者隐式指定length的值,数组中的每一个元素也会使用默认初始值进行初始化。char==>”
整型–》0 浮点型—0.0 boolean——》false 引用-》null
3.数组声明变量不代表创建数组对象
4.数组在内存中使用连续的内存空间存储,数组访问使用索引值(0—(length-1))
5.数组一旦创建,长度时不能改的。

二、数组的声明,创建,初始化
1.声明
语法:DataType[] varName;
DataType varName[];
int[] a;
Person[] ps;
int[] a,b;//声明了数组变量a和b
int a[],b;

2.创建:
    语法:new DataType[length];
    note:创建数组时,length必须指定,并且数组一旦创建,length不能修改。
    a = new int[3];
    ps = new Person[2];
3.初始化:
    1.声明,创建,初始化分开
        int[] a;
        a = new int[4];
        a[0] = 1;
        a[1] = ....
        ...
        a[3] = 23;  

        Person[] ps;
        ps = new Person[2];
        ps[0] = new Person();
        ps[1] = new Person();

    2.声明,创建,初始化在一起
        int[] a = {1,2,3,5,5};
        int[] a;
        a = {1,2,3};//error;
        a = new int[]{1,2,3,4,4};

        Person[] ps = {
                new Person(),
                new Person()
            };
        ps = new Person[]{new Person()}

Person{
String name;
String gender;
int age;
}
Person p = new Person();
p.name
p.age
int[] a = new Int[3];
a[0]
a[1]
三、数组的操作
1.数组数据的访问:
varName[index]
index =====> 0—varName.length-1
2.访问的数组中所有的数据的值。(数组的遍历)
for
while
do…while
3.数组中数据的增删改查的操作:
int[] a = new int[5];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
6
增加{
1.扩展空间
int b = new int[10];
2.数组的copy
}
4.数组的copy
int[] a = {1,2,3,4};
int[] b = new int[6];
b[0] = a[0]; 0
b[1] = a[1]; a.length-1
for(int i = 0,i

Type.parseType(String);

advance 2

model 7:
一、集合:
用来存储对象,并且只能存储对象的对象。
二、java中的集合组成:
1.接口:给每一种类型的集合定义了必须实现的方法。
2.实现:针对每一中类型的集合提供的若干实现类,例如:ArrayList,LinkedList,Vector……
3.算法:对于数据的增删改查的实现。

package: java.util.*;

三、集合分类:
1.Collection:用于存放单个值的集合。jdk不提供针对与这个接口的直接实现。
Collection{
add(Object obj);
addAll(Collection coll);
remove(Object value);
removeAll(collection coll);
size();
toArray();
interator();
}
1).List:
1.有序的集合,可以精确的控制元素插入的位置。 可以通过int index来访问和查找当前集合中的 元素。
2.允许存放重复值
3.如果允许存放null的值,那么null可以多次出现。
interface List extends Collection{
add(int index,Object e);
addAll(int index,Collection c);
get(int index);
remove(int index);
set(int index,Object e);
subList(int from,int to);[from,to);
}
1).ArrayList:允许重复值,并且允许null
1.借助于数组实现的。
2.数组空间连续,所以通过索引值进行随机访问的效率非常高。
3.数组一旦创建长度不能改,所以如果插入u要判断容量,扩容,还有可能会涉及数据的搬移,所以相对来说插入,删除效率较低。
2).Vector:线程安全的ArrayList
3).LinkedList:借助于双向链表实现的有序的线性结构。
1.所有的数据都是离散的分布在内存中,不需要事先申请连续空间存储,不受长度限制
2.插入不需要判断容量,也不需要移动数据,删除也不需要移动数据,所以插入删除效率相对较高
3.因为数据离散分布,随机按照索引值查找,需要从第一个开始,或者从最后一个开始数,所以查找效率相对较低。

2).Set:不允许存放重复值。最多只能有一个null元素。
HashSet:借助于hash表实现,内部维护的是一个HashMap的实例
HashSet在判断值是否重复时,先判断hashCode的返回结果是否一致,如果hashCode一致,再调用equals方法看返回结果是否为true,如果是,认为值重复,如果不是,认为不是重复的值。
if(e.hash==hash&&(e.key==key||e.equals(key)))
作为HashCode方法的重写过程:如果两个对象的equals返回结果位false,为了提高写入效率,尽可能让hashCode值不一样(散列)。
SortedSet:有序的set集合,当前集合中所有的元素按照他们的自然排序规则排序,或者按照创建SortedSet集合时传递的Comparator进行排序。
1.自然排序:拥有自然排序规则的对象一定时实现了java.lang.Comparable接口的对象。
comparable{
int compareTo(Object obj){
return {
if(this>obj) return 1;
if(this==obj) return 0;
if(this

JAVA 笔记 (总)

标签:

原文地址:http://blog.csdn.net/w124374860/article/details/51180590

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!