JAVA学习笔记—review基本概念1

粗略的看了看黑皮书系列的java前半部分,这里整理一下知识要点。

java与c语言最大的区别就是java是一种面向对象的编程语言,何谓面向对象,我最直观的理解是一种抽象的方法。比如说你为了某个功能编写了一段代码,在解决问题中用到了这段代码,这时你就可以将此段代码所能实现的功能抽象成一个对象。当你用到它时,声明并且执行其中响应的方法。这样的设计可以大大的提高编程的效率,也可以帮助编程人员清晰的掌握程序的结构,更重要的一点是你可以不必理解一个对象的实现方式,传入规定参数就可以得到正确的结果。

工欲善其事,必先利其器,我用的是sun公司的eclipse,当然还有许多优秀的编程工具,选择一款适合自己的才是高效的第一步。

1、配置java环境变量:
JAVA_HOME:配置JDK的目录
CLASSPATH:指定到哪里去找运行时需要用到的类代码(字节码)
PATH:指定可执行程序的位置

LINUX系统(在" .bash_profile "下的环境变量设置)
JAVA_HOME=/opt/jdk1.5.0_06
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$PATH:$JAVA_HOME/bin:.
export JAVA_HOME CLASSPATH PATH     (将指定的环境变量声明为全局的)

windows系统:
右击我的电脑-->属性-->高级-->环境变量

2、Java的运行过程:

在java中:先编译后解释,把.java文件编译成.class字节码文件

Java源代码文件(.java文件)--->Java编译器(javac)--->Java字节码文件(.class文件,平台无关的)--->Java解释器(java),执行Java字节码


3、Java的垃圾回收:
由一个后台线程gc进行垃圾回收,意味着java在编写中不像c一样必须手动回收内存。
回收机制:虚拟机判定内存不够的时候会中断代码的运行,这时候gc才进行垃圾回收
缺点:不能够精确的去回收内存
语句:java.lang.System.gc();建议回收内存,但系统不一定回应,他会先去看内存是否够用,够用则不予理睬,不够用才会去进行垃圾回收。


4、java的安全性:
沙箱机制:只能做沙箱允许的操作
通过下面环节,实现安全
加载有用的类文件,不需要的不加载
校验字节码,查看允许的操作
查看代码和虚拟机的特性是否相符
查看代码是否有破坏性
查看是否有违规操作,如越界
查看类型是否匹配,类型转换是否能正确执行

斯坦福大学的某教授说java和c的区别时,说过一句有趣的比喻:她将java比喻成一个敬职敬责的母亲,时刻提醒你不应该做什么应该做什么。


5、程序结构:

源程序:
package mypack;//相当于一个目录

public class HelloWorld{
public static void main(String[] args){
System.out.println(“Hello World”); 
}
}
注:
1、文件名必须和public修饰的类名一致,以.java作为文件后缀,如果定义的类不是public的,则文件名与类名可以不同。
2、一个.java文件中可以有多个class,但是只有一个public修饰的类。
3、java源代码文件编译后,一个类对应生成一个.class文件
4、一个java应用程序应该包含一个main()方法,它是应用程序的入口方法,可以定义在任意一个类中,不一定是public修饰的类


包(package):把源文件放在目录下
由于工程的需要,将不同的源文件放在不同的目录下,从而引入了包。
执行该程序需要用" java 包名.类名 "
引进包中的某个类:import 包名.类名;
引进包中的所有类:import 包名.*;

注释:
// 单行注释, 到本行结束的所有字符会被编译器忽略
/* */ 多行注释,  在/*  */之间的所有字符会被编译器忽略
/**  */   文档注释, java特有的,在/**  */之间的所有字符会被编译器忽略
可以用javadoc把java源程序中这种注释抽取出来形成html页面(只有写在包,类,属性,方法,构造器,引入之前的注释才可以进行抽取)
 
6、标识符:
命名规则:
(1) 由字母、数字、下划线、$组成,不能以数字开头
(2) 大小写敏感
(3) 不得使用java中的关键字和保留字

习惯:
(1) 标识符要符合语义信息
(2) 包名所有字母小写
(3) 类名每个单词首字母大写,其它小写 //HelloWorld
(4) 变量和方法:第一个单词小写,从第二个单词开始首字母大写 //tarenaStudent
(5) 常量:所有字母大写,每个单词之间用" _ "连接

7、基本数据类型:8种
1) 整型 
byte     
short      
int        
long       
2) 浮点类型 
float        
double    
3) 字符类型 
  char       
4) 布尔型
boolean    false/true

元素初始值
类型                     黙认值 
byte                     
short                    
int                      
long                     0l 
float                    0.0f 
double                   0.0d 
char                     \u0000
boolean                false 
reference types    null

注意:
1、Java中的自动类型转换问题。
1)、正向过程:从低字节到高字节可以自动转换。
byte->short->int->long->float->double
2)、逆向过程:从高字节到低字节用强制类型转换。
例:int i = Integer.parseInt(F);
注:逆向转换将丢失精度。
2、boolean:只有true和false。
3、char:Java中用" \u四位十六进制的数字 (即使在注释中出现\u,后面如果跟的不是4个数字,也会报错)"表示将字符转换成对应的unicode编码,字符类型要用单引号括起来。
4、黙认浮点类型为double,float数据类型有一个后缀为" f "或" F "。
5、long类型有一个后缀,为" l " 或者" L "

8、引用数据类型:
类、接口、数组
引用类型 变量名 = new 引用类型名(参数);//new后面一般跟的都是类的构造器
成员:写在类体括号里面的

9、变量

全局变量:一般在类名之后方法名之前生命,作用域是整个类。

  加之public字段表明其他类也可以访问此变量

  static 字段表明变量可以被访问和修改

局部变量:不是声明在类体括号里面的变量
(1)必须要先赋值,后使用,否则通不过编译,局部变量没有默认初始化值
(2)作用范围:定义开始到定义它的代码块结束
(3)同一范围内,不允许2个局部变量命名冲突


10、运算符

移位运算符:效率最高
>>   有符号右移,补符号位
移负数位,则将该数值加32后再进行移位
数值的2进制是按照补码保存的
>>>  右移后高位都补0

逻辑运算符:
&/|也可以作为逻辑运算符
&& 先判断前面一个条件,如果为假,则不用计算后一个条件
|| 先判断前面一个条件,如果为真,则不用计算后一个条件

" + "运算符:
两个操作的对象是数值时,是加法
如果有一个是字符串时,则是字符串的连接

流程控制语句:
for、whlie、do-whlie
switch中的变量类型只能是byte、 short、int、char四种类型

11、数组

声明数组:   
数组能以下列形式声明:
类型[] array;
类型 array[];  
注:
JAVA中推荐用:类型[] array;
一个数组是一个对象
声明一个数组没有创建一个对象
声明时不用指定长度

创建数组:
创建基本数据类型数组:int[] i = new int[2]; 
创建引用数据类型数组:Student[] s = new Student[100]; 
创建时一定要指定长度

初始化数组: 
声明、创建、初始化分开: 
int[] i;   //定义数组
i = new int[2]; //分配空间
i[0] = 0;   //初始化
i[1] = 1; 

声明、创建、初始化在同一时间 :
int[] i = {0,1};  //显示初始化  {}中有几个值,则数组长度为几
Student[] s = {new Student(),new Student()}; 

注: int[] i=new int[]{1,2,3};    //后面[]中不可以写数值
int[] i1=new int[3]{1,2,3};   //error
 
二维数组:(其实是一个一维数组,它的每一个元素又是一个一维数组)
int[][] i1 = new int[2][3]; 
int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
int[][] i3 = new int[][3];//不允许高维没分配空间而先给低维分配空间
int[][] i2 = new int[2][]; 
i2[0] = new int[2];
i2[1] = new int[3];     

数组长度:
数组的属性length
数组长度一旦确定,不可改变     
int[] i = new int[5]; 则i.length= 5

数组拷贝:
系统类System提供的
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 
src: 源数组
srcPos: 从源数组哪个位置开始拷贝(位置指的是元素的下标)
dest: 目标数组
destPos: 拷贝的元素放到目标数组的起始位置
length: 拷贝多少个

数组排序:
自己实现一个排序方法来进行排序
或者调用java.util.Arrays.sort(Object o)


先到这里吧,这里的知识很多都和c语言很像。我身边的朋友有人会很多种语言,但是都是浅尝则止,我想说如果你想从事编程开发,最好精通一门语言的基础上再去学别的语言。因为编程思想是想通的,只是表达方式和语法不同。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值