Java学习笔记(一)——程序基础

来源:互联网 发布:淘宝人气怎么刷 编辑:程序博客网 时间:2024/05/21 05:20

1.Java代码安全性检查机制

首先由类装载器(class loader)负责把类文件(.class文件)加载到java虚拟机中,它通过区分本机文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就固定了.

然后,字节码校验器进行校验.字节码校验器不检查那些可信任的编译器所生成的类文件,而是对那些有意违背命名空间规定和java语言规则的类文件加以检查,并关闭具有安全性漏洞的类文件.

如果字节码校验器校验通过,Java解释器负责把该类文件解释成为机器码进行执行.

 

2.局部变量,实例变量和类变量

局部变量(stack variable)是定义在方法里的变量.它在定义该变量的方法被调用时被创建,而在该方法退出后被撤销.

实例变量(instance variable)是在方法外而在类声明内定义的变量,有时也叫成员变量.它在是用new Xxx()创建该类的实例时被创建,而其生存期和该类的实例对象的生存期相同.

类变量(class variable)是用关键字static声明的实例变量.它在该类被加载时被创建,不一定要用new Xxx()创建,所有该类的实例对象共享该类变量,其生存期是类的生存期.

任何变量使用前都应该被初始化,其中,局部变量必须显示初始化,而实例变量不必.

实例变量在类的一个实例构造时完成初始化,而且在类的静态方法中不能直接访问类的非静态成员,而只能访问类成员,类的普通方法可以访问类的所有成员和方法,而静态方法只能访问类的静态成员和方法,因为静态方法属于类,而普通方法及成员变量属于类的实例,类方法(实例方法)不能使用属于某个不确定类的实例方法和变量,在静态方法里没有隐含的this,而普通方法有.

 

3.java语言符号

Java标识符是区分大小写的,但没有字符个数的限制.

不管是整型还是实型的取模运算,余数的符号与被除数a的符号相同.

 

4.equals()和==

equals()是Object类的一个方法,指示某个其他对象是否与此对象"相等".由于Object类是类层次结构的根类,所以它是每个类的超类.每个类都可以重写equals()方法,如String类.如果没有重写新类的equals(),则该方法和==操作符一样在两个变量指向同一对象时返回真.

Java推荐使用equals()方法来判断两个对象的内容是否一样.

考察"=="和equals()方法,注意如下几点区别:

(1)引用类型比较引用;基本类型比较值

(2)equals()方法只能比较引用类型,"=="方法可以比较引用及基本类型

(3)用equals()方法进行比较时,对类File,String,Date及封装类来说,是比较类型和内容.

(4)用"=="进行比较时,符号两边的数据类型必须一致,否则编译出错.

值得注意的是:

String str1 = "harlan";

String str2 = "harlan";

str1==str2 由于str1和str2不是使用new创建的,它们指向内存池中的同一个字符串常量,因此其实际地址其实是相同的,为true;而str1.equals(str2),为true.

 

5.||短路运算,&&全部运算

赋值运算的左操作数必须为右操作数指明一个确定的可存储位置,而右操作数可以使常量,变量,方法调用或者任何合法的Java表达式,包括赋值表达式本身.因此,表达式y++=x+3是错误的.错误的原因并不是因为赋值运算的左操作数是一个表达式,而在于这个左操作数表达式不能确定一个可存储位置,从而导致x+3的结果无法存储.

赋值运算符具有右结合性,a+b+c可以理解为a+(b+c)

 

6.Java规定了float类型十进制数的有效位为7位(整数位的数字个数+小数位的数字个数=7),再加上一个四舍五入的进位,共8位.

double类型十进制数的有效位为16位(整数位的数字个数+小数位的数字个数=16),再加上一个四舍五入的进位,共18位.

布尔型是一个独立的类型,它不像C语言中的布尔型可以代表0和1,在java中,布尔类型是不能转化成int型的.

 

7.数据类型的转换方式主要分成3种:

自动类型转换,强制类型转换,包装类过渡类型转换

通常一个长整型数值可以被转换为byte型,如果长整型数大于127,转换为byte型就会变成-128

当一个操作数为原始数据类型,另一个操作数为字符串时,则基本类型的操作数要转换成等价的字符串.如99+"3.33"结果是"993.33"

 

8.一旦数组初始化或用new为数组分配了存储空间以后,该数组的长度即被固定下来,不能进行更改,除非再新建一个数组,重写分配内存空间.

数组表示长度的形式为数组名.length,在类String中表示长度的形式为String对象.length()

 

9.String Pool

就是String池,也就是内存的数据段区,专门存放静态变量和字符串的区,如String a = "abc";那么字符串"abc"就存放在String Poo中,a作为String Pool中"abc"的一个引用;如果是String b = new String("abc"),该对象就存放在内存的heap(堆)里面,b是该对象的引用.

 

10StringBuffer sb = new StringBuffer("123456");

sb.setLength(4);

sb结果为"1234"

 

 

 

 

原创粉丝点击