双元教育
因为版本的问题,导致他的可能性不太一样
Java中的switch语句中的N不能为字符串 (错误)
C语言中数组的声明中,长度是否可以为变量 (错误)
变量复习
变量是内存中的存储单元,可以直接或间接的被程序访问。
变量的特性:变量类型、变量长度、变量名、变量的作用域
变量的类型
原始类型和引用类型
原始类型包括:数字型和布尔型两种
long、int、short、byte、char、float、double都是数字型;boolean是布尔型。
字符串不是基本数据类型
布尔型只能是true、false/不能是其他任何值,如0/1
在C语言中就可以,但是C语言没有布尔类型;
js可以,但js没有变量类型。
原始类型变量中存放的就是数据本身;引用类型变量中引入的是引用(地址),该引用指向一个堆中的对象。
public class Person{
private int id=1;
get/set
}
public show(Person a){
a.id=10;
}
变量的长度
变量的长度受变量的类型的影响。原始类型的变量长度是受类型变化影响的;而引用类型的变量长度是固定的。
byte长度8位、short长度16位、int长度32位、long长度64位,以上四个类型是有符号整数。
char长度16位,是无符号整数,表示UTF-16的字符。
float长度32位、double长度64位,以上两个类型为满足IEEE754的浮点数。
变量的作用域
-
静态变量,特性:同类多对象共享;一般变量名全大写;访问方式是类名.变量名;非线程安全
-
实例变量(属性),特性:对象独享;首字母小写,之后驼峰;访问时需要先实例化所在对象;非线程安全;声明 不赋值有默认值。
-
局部变量(方法参数),特性:方法内部使用;首字母小写,之后驼峰;线程安全;声明不赋值无默认值。
局部变量与成员变量区别
1,作用域不同
局部变量存放在栈内存中;成员变量作为对象的一部分存放在堆内存中。
2,初始化方式不同:如果不进行初始化,JVM会自动给成员变量一个初始值。整型为0,double为0.0。局部变量则不会自动初始化。
3,线程安全不同。局部变量是线程安全的;实例变量是非线程安全的。
基本数据类型变量与引用变量
基本数据类型变量中存放的是普通的数据
引用变量中存放的是某个对象的引用(类似C/C++中的指针,存放的是首地址)
静态导入
import static java.lang.System.*;
以上为静态导入,可以免前缀。如下:
System.out.println(...);
可以改为:
out.println(...);
流程控制复习
if
小括号中必须是boolean类型的值 if(1){} //在java中是错误的 if(true){}
for/while/do..while
java中称为forEach语句,C++中称为范围for循环(rang for) java:
for(int element:arrays){
...
}
C++11:
for(auto element:arrays){
...
}
switch
在JDK1.7之后,小括号中可以使用字符串(String)。c/c++都不可以。
switch(n){
case 1:...;break;
case 2:...;break;
default:...;
}
函数复习
C/C++称函数;java中称方法。 函数或方法都是先定义后使用。 java/C++中增加了访问修饰符,C语言中没有。 函数或方法的声明
[访问修饰符] 返回值类型 方法名(数据类型 参数名,...){
...
}
输入输出
Scanner类不适用于从控制台读取密码,JavaSE 6引入了Console类实现这个目的。 example:
Console cons=System.console();
String userName=cons.readLine("用户名:");
char[] password=cons.readPassword("密码");
Scanner类可以对文件进行操作 Scanner类可以对文件进行操作 这种操作的基础是为Scanner类的构造方法传入一个File对象。 example:
Scanner in=new Scanner(Paths.get("myfile.txt"),"utf-8);
如果要指定绝对地址则需要,如下: "c:\myFile\myfile.txt"