JAVA基础篇
java语言的特点:
1.面向对象(两个基本概念:类、对象;三大特性:封装、继承、多态)
2.健壮性(吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与
释放等),提供了一个相对安全的内存管理和访问机制 )
3.跨平台性
因为有了JVM,同一个JAVA程序在三个不同的操作系统中都可以执行。
java两种核心机制:
JAVA虚拟机、垃圾收集机制
JDK,JRE,JVM三者之间的关系,以及JDK、JRE包含的主要结构。
JDK包含JRE,JRE包含JVM.
JDK = JRE + Java的开发工具(javac.exe,java.exe,javadoc.exe)
JRD = JVM + Java核心类库
为什么要设置path(或者说,设置path的目的是什么)?
目的是为了在控制台的任何文件路径下,都可以调用jdk指定目录下的所有指令。
源文件名是否必须与类名相同?如果不是,那么什么情况下,必须相同?
源文件的命名规则:
1、如果源文件中有多个类,那么只能有一抄个类是public类。
2、如果有一个类时袭public类,那么源文件的名字必须与这个类的名字完全相同,扩展名是.java。
3、如果源文件没有public类,那么源文件的名字只要与某个类的名字相同,并且扩展名是.java 就可以。
Java的注释方式有哪几种,格式为何?
分类:
单行注释://
多行注释:/* */
文档注释:/** */
作用:
① 对所写的程序进行解释说明,增强可读性。方便自己,方便别人
② 调试所写的代码
特点:
①单行注释和多行注释,注释了的内容不参与编译。
② 注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
③ 多行注释不可以嵌套使用
GC是什么? 为什么要有GC
答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,
忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收
答:对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
关键字和保留字
关键字:
定义: 被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点: 关键字中所有字母都为小写
保留字:现有Java版本尚未使用, 但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字goto 、 const
标识符
Java 对各种变量、 方法和类等要素命名时使用的字符序列称为标识符
技巧:凡是自己可以起名字的地方都叫标识符。
定义合法标识符规则:
1.由26个英文字母大小写, 0-9 , _或 $ 组成
2.数字不可以开头。
3.不可以使用关键字和保留字,但能包含关键字和保留字。
4.Java中严格区分大小写,长度无限制。
5.标识符不能包含空格。
Java中的名称命名规范:
包名:多单词组成时所有字母都小写: xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写: XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个
单词首字母大写: xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接: XXX_YYY_ZZZ
变量的分类-按数据类型
String不是基本数据类型,属于引用数据类型
基本数据类型转换
容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
1.有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
2.byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
3.boolean类型不能与其它数据类型运算。
4.当把任何基本数据类型的值和字符串(String)进行连接运算时(+), 基本数据类型的值将自动转化为字符串(String)类型。
运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。可分为算术运算符、赋值运算符、比较运算符(关系运算符)、逻辑运算符、位运算符、三元运算符。
1.算术运算符
举例
public class demo1 {
public static void main(String[] args) {
int i1 = 10;
int i2 = 20;
int i = i1++;
System.out.print("i="+i);
System.out.println("i1="+i1);
i = ++i1;
System.out.print("i="+i);
System.out.println("i1="+i1);
i = i2--;
System.out.print("i="+i);
System.out.println("i2="+i2);
i = --i2;
System.out.print("i="+i);
System.out.println("i2="+i2);
}
}
比较运算符
逻辑运算符
- 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
- “&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。 - “|”和“||”的区别同理, ||表示:当左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
位运算符
位运算是直接对整数的二进制进行的运算 。
三元运算符
表达式1和表达式2为同种类型
三元运算符与if-else的联系与区别:
1)三元运算符可简化if-else语句
2)三元运算符要求必须返回一个结果。
3) if后的代码块可有多个语句
运算符的优先级
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
程序流程控制
其流程控制方式采用结构化程序设计中规定的三种基本流程结构, 顺序结构、分支结构、循环结构 。
顺序结构
分支结构
import java.util.Scanner;
public class dem2 {
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
System.out.println("请输入分数:");
int grade=scan.nextInt();
if (grade==100){
System.out.println("BMW ");
} else if (grade>80&&grade<99) {
System.out.println("iphone ");
} else if (grade>60&&grade<80) {
System.out.println("ipad");
} else {
System.out.println("NONE");
}
}
}
switch-case结构
switch(表达式){
case 常量1:
语句1;
// break;
case 常量2:
语句2;
// break;
… …
case 常量N:
语句N;
// break;
default:
语句;
// break;
}
public class dome4 {
public static void main(String args[]) {
String season = "summer";
switch (season) {
case "spring":
System.out.println("春暖花开");
break;
case "summer":
System.out.println("夏日炎炎");
break;
case "autumn":
System.out.println("秋高气爽");
break;
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
}
}
1.switch(表达式)中表达式的值必须是下述几种类型之一: byte, short,char, int, 枚举 (jdk 5.0), String (jdk 7.0);
2.case子句中的值必须是常量,不能是变量名或不确定的表达式值;
3.同一个switch语句,所有case子句中的常量值互不相同;
4. break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
5.default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default
循环结构
循环语句分类:for 循环、while 循环、do-while 循环
循环语句的四个组成部分 :初始化部分(init_statement)、循环条件部分(test_exp)、循环体部分(body_statement)、迭代部分(alter_statement) 。
1.for 循环语法格式
for (①初始化部分; ②循环条件部分; ④迭代部分){
③循环体部分;
}
执行过程:
①-②-③-④-②-③-④-②-③-④-…-②
说明:
②循环条件部分为boolean类型表达式,当值为false时,退出循环
①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
④可以有多个变量更新,用逗号分隔
while循环语法格式
①初始化部分
while(②循环条件部分){
③循环体部分;
④迭代部分;
}
执行过程:
①-②-③-④-②-③-④-②-③-④-…-②
说明:
注意不要忘记声明④迭代部分。 否则, 循环将不能结束, 变成死循环。
for循环和while循环可以相互转换
do-while循环语法格式
①初始化部分;
do{
③循环体部分
④迭代部分
}while(②循环条件部分);
执行过程:
①-③-④-②-③-④-②-③-④-…②
说明:
do-while循环至少执行一次循环体
特殊关键字的使用:break、 continue
break 语句
break语句用于终止某个语句块的执行
eak语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
label1: { ……
label2: { ……
label3: { ……
break label2;
……
}
}
}
public class BreakTest{
public static void main(String args[]){
for(int i = 0; i<10; i++){
if(i==3)
break;
System.out.println(" i =" + i);
}
System.out.println("Game Over!");
}
}
continue 语句
continue只能使用在循环结构中
continue语句用于跳过其所在循环语句块的一次执行,继续下一次循环
continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环
continue语句用法举例
public class ContinueTest {
public static void main(String args[]){
for (int i = 0; i < 100; i++) {
if (i%10==0)
continue;
System.out.println(i);
}
}
}
return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
与break和continue不同的是, return直接结束整个方法,不管这个return处于多少层循环之内 .
特殊流程控制语句说明
1.break只能用于switch语句和循环语句中。
2.continue 只能用于循环语句中。
3.二者功能类似,但continue是终止本次循环, break是终止本层循环。
4.break、 continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
5.标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
6.很多语言都有goto语句, goto语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但使程序容易出错。 Java中的break和continue是不同于goto的。
public class demo6 {
public static void main(String[] args){
boolean isFlag=true;
int count=0;
for(int i=2;i<100;i++){
labe1:for(int j=2;j<=Math.sqrt(i);j++){
if (i%j==0){
isFlag=false;
//break;
continue labe1;
}
}
if(isFlag==true){
System.out.println(i);
count++;
}
isFlag=true;
}
System.out.println("质数的个数:"+count);
}
}