硬件:看得见摸得着;
软件:看不见摸不着,指令,指导硬件工作;
面向对象性:两个基本概念:类、对象;三大特性:封装、继承、多态
健壮性:吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。
System.out.println();打印完后,会换行。
System.out.print();打印完后,不会换行。
java"源文件中可以包括多个类(不是内部类)。但最多只有一个类名声明为public,与文件名相同。
JDK>JRE>JVM.
JVM(java虚拟机):即解析器,解决java跨平台问题(实质是跨虚拟机).
JRE(java运行环境):包含JVM和java基础类库.
JDK(java开发工具包):包含JRE和java程序调试和分析的工具.
GC(garbage collection):垃圾收集,防止内存泄露.GC通常作为一个单独的低优先级的线程在不可预知的情况下运行.
JAVA是由C++发展而来,GC的出现,摒弃了C++繁琐的内存管理,使服务器端的编程减少了内存泄露;但是,现在的Android开发中GC也是饱受诟病.
文件中只有一个类,文件名必须和类明一致.
1)垃圾回收器的基本原理是什么?
(2)垃圾回收器可以马上回收内存吗?
(3)有什么办法主动通知虚拟机进行垃圾回收?
答:
(1)当对象被new出来时候,GC就开始监控这个对象的地址、大小、使用情况,通常GC采用有向图的方式记录和管理堆中的所有对象,从而确定对象是否可达,若不可达,GC就回收这些内存空间.
(2)可以.
(3)请求垃圾收集,可以调用下面;
①System.gc();
②Runtime.getRuntime().gc()
但是,由于GC是在一个很低的线程中运行,所以不一定会执行.
关键字
定义:用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
标识符
字母数字下划线
不可数字开头
区分大小写·
Java中的名称命名规范:
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个 单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
变量的作用: 用于在内存中保存数据 包含变量类型、变量名和存储的值
Java中每个变量必须先声明,后使用,同一作用域内才有效,不可以重复定义。变量的作用域:其定义所在的一对{ }内
在方法体外,类体内声明的变量称为成员变量。
在方法体内部声明的变量称为局部变量。
同:都有生命周期 异:局部变量除形参外,需显式初始化。
字符型变量的三种表现形式:
字符常量是用单引号(‘ ’)括起来的单个字符。例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。 例如:char c3 = ‘\n’; // '\n’表示换行符
直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表 一个十六进制整数。如:\u000a 表示 \n。
char类型是可以进行运算的。因为它都对应有Unicode码。 “字符”(2字节)
Unicode:一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一 无二的编码,使用 Unicode 没有乱码的问题。
没有规定这个二进制代码 应该如何存储
计算机无法区分三个字节表示一个符号 还是分别表示三个符号
每个符号用三个或四个字节表示,那么每个英文字母前都必然有 二到三个字节是0,对于存储空间来说是极大的浪费。
UTF-8 是一种变长的编码方式。
大端存储 :高字节低地址
小端存储:高字节高地址
boolean类型数据只允许取值true和false,无null。 不可以使用0或非 0 的整数替代false和true
String不是基本数据类型,属于引用数据类型, 使用方式与基本数据类型一致。
System.out.println(‘a’+1+“Hello!”); //输出:98Hello!
将容量大的数据类型转换为容量小的数据类型。使 用时要加上强制转换符,
boolean类型不可以转换为其它的数据类型。
String a = “43”; int i = Integer.parseInt(a);
1)short s = 5; s = s-2; //判断:no
2) byte b = 3; b = b + 4; //判断:no
b = (byte)(b+4); //判断:yes
取模运算的结果不一定总是整数。如double类型
short s=3; s+=2; s=s+2;
因为编译器自动将+=运算符后面的操作数强制转换为前面变量的类型,所以s+=2不会报错.
同时类似的还有: -= *= /= %=
int n = 10; n += (n++) + (++n); System.out.println(n);
结果是32 好好思考wwj
检查是否是类的对象
“Hello” instanceof String
aa instanceof AA检查aa是否是AA的子类
&—逻辑与
&& —短路与
单&时,左边无论真假,右边都进行运算;
int x = 1;
int y=1;
if(x++2 & ++y2){
x =7;
}
System.out.println(“x=”+x+",y="+y);
2 2
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
Java中定义成员变量时采用合法的前向引用
当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓 当多个条件是“包含”关系时,“小上大下 / 子上父下”
switch(表达式){
case 常量1:
语句1;
// break;
case 常量2:
语句2;
// break;
… …
case 常量N:
语句N;
// break;
default:
语句;
// break;
}
switch(表达式)中表达式的值必须是下述几种类型之一:byte,short, char,int,枚举 (jdk 5.0),String (jdk 7.0);
default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时, 执行default
使用switch-case的,都可以改写为if-else
for (①初始化部分; ②循环条件部分; ④迭代部分){
③循环体部分; }
break只能用于switch语句和循环语句中。 continue 只能用于循环语句中。 二者功能类似,但continue是终止本次循环,break是终止本层循环。
break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
char型变量中能不能存贮一个中文汉字?为什么?
答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,
所以放一个中文是没问题的
义float f=3.4;是否正确?
答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4-----这里的3.4不强转则为double类型 float f = 3.4F;
一个数如果恰好等于它的因子之和,这个数就称为"完数"。(因子:除去这个数本身的约数)
例如6=1+2+3.编程 找出1000以内的所有完数
public static void main(String[] args) {
System.out.println(“1-1000之间的完数有:”);
for(int i=1;i<=1000;i++){
int sum = 0;
for(int j=1;j<i;j++){
if(i%j==0){
sum +=j;
}
}
if(sum == i){
System.out.println(i);
}
}
}
所谓BOM头(Byte Order Mark)就是文本文件中开始的几个并不表示任何字符的字节,用二进制编辑器(如bz.exe)就能看到了。
UTF8 的 BOM 头为 0xEF 0xBB 0xBF
Unicode 大端模式为 0xFE 0xFF Unicode 小端模式为 0xFF 0xFE
UTF-8就是在互联网上使用最广的一种Unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。