注释
文档注释以“/**”开头以“*/”结尾,注释中包含一些说明性的文字及一些
JavaDoc 标签(后期写项目时,可以生成项目的 API。
/**
* Welcome 类(我是文档注释)
* @author 高淇
* @version 1.0
*/
public class Welcome {
//我是单行注释
public static void main(String[ ] args/*我是行内注释 */) {
System.out.println("Hello World!");
}
/* 我是多行注释!
我是多行注释!
*/
}
标识符
表示类名的标识符:每个单词的首字母大写,如 Man, GoodMan
表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为
“驼峰原则”,如 eat(), eatFood()
变量
局部变量
成员变量(实例变量)从属于对象,生命周期伴随对象始终。
静态变量 从属于类始终,从类加载到卸载。如果不自行初始化,和成员变量相同会自动初始化成该类型的默认初始值。
public class MyStatic {
// 静态变量
private static int index = 0;
// 实例变量
private int count = 0;
public void inc() {
index++;
count++;
}
public String get() {
return "静态变量index = " + index + ", 实例变量count = " + count;
}
}
/**
* index是静态变量
* count是实例变量
* */
public class StaticVariableTest {
public static void main(String[] args) {
MyStatic myStatic1 = new MyStatic();
MyStatic myStatic2 = new MyStatic();
MyStatic myStatic3 = new MyStatic();
myStatic1.inc();
System.out.println("myStatic1的index、count增加1:");
System.out.println("myStatic1的" + myStatic1.get());
System.out.println("myStatic2的" + myStatic2.get());
System.out.println("myStatic3的" + myStatic3.get() + "\n");
myStatic2.inc();
System.out.println("myStatic2的index、count增加1:");
System.out.println("myStatic1的" + myStatic1.get());
System.out.println("myStatic2的" + myStatic2.get());
System.out.println("myStatic3的" + myStatic3.get() + "\n");
myStatic3.inc();
System.out.println("myStatic3的index、count增加1:");
System.out.println("myStatic1的" + myStatic1.get());
System.out.println("myStatic2的" + myStatic2.get());
System.out.println("myStatic3的" + myStatic3.get());
}
}
myStatic1的index、count增加1:
myStatic1的静态变量index = 1, 实例变量count = 1
myStatic2的静态变量index = 1, 实例变量count = 0
myStatic3的静态变量index = 1, 实例变量count = 0
myStatic2的index、count增加1:
myStatic1的静态变量index = 2, 实例变量count = 1
myStatic2的静态变量index = 2, 实例变量count = 1
myStatic3的静态变量index = 2, 实例变量count = 0
myStatic3的index、count增加1:
myStatic1的静态变量index = 3, 实例变量count = 1
myStatic2的静态变量index = 3, 实例变量count = 1
myStatic3的静态变量index = 3, 实例变量count = 1
Java堆存放几乎所有的对象实例,被所有线程共享
方法区(永久代)与Java堆一样,是各个线程共享的内存区域,它用于存储已经被虚拟机加载类的类信息、常量、静态变量(static variable)等。
个人理解:方法区存放的是静态的数据,而堆存放的是动态生成的数据。
常量 一旦初始化后不能更改其值。
final type varName = value;
命名方式:大写字母和下划线
基本数据类型和引用数据类型
基本数据类型:
数值型- byte、 short、int、 long、float、 double
float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或者d, 以明确其为double类型。
浮点数能够精确表示的数是有限的,因而也是离散的。 浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。二进制浮点数不能精确的表示0.1、0.01、0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。
java.math 包下面的两个有用的类:BigInteger 和 BigDecimal,这两个类可以处理任意长度的数值。BigInteger 实现了任意精度的整数运算。BigDecimal 实现了任意精度的浮
点运算。
字符型- char
布尔型-boolean
byte类型详讲
byte 8位,范围[-128,127]
最高位是0为正数,最高位为1为负数。负数的值是取反加一然后加一个负号就是负数的值
最大正数:01111111,十进制为127
最小负数:1000000, 取反01111111,加一10000000,取反-128
最大正数加一得到最小负数
byte a = 127;
a+=1;
System.out.println(a);
结果正好是-128。
由此可得二进制从00000000–>01111111–>10000000–>11111111即为十进制从0、127、-128、-1。
接下来,我们用一段代码来更深刻地理解byte:
public class A {
public static void main(String[] args) {
int b = 456;
byte test = (byte) b;
System.out.println(test);
}
}
上述代码,最后会输出-56。原因如下:
456的二进制表示是111001000,由于int是32位的二进制,所以在计算机中,实际上是00000000000……111001000,当int转成byte的时候,那么计算机会只保留最后8位,即11001000。
然后11001000的最高位是1,那么表示是一个负数,而负数在计算机中都是以补码的形式保存的,所以我们计算11001000的原码为00111000,即56,所以11001000表示的是-56,所以最后test的值为-56。
引用数据类型(之后会详讲)
类
接口
数组
运算符
算数运算符
如果两个操作数有一个为 long, 则结果也为 long。
没有 long 时,结果为 int。即使操作数全为 short,byte,结果也是 int。
如果两个操作数有一个为 double,则结果为 double。
只有两个操作数都是 float,则结果才为 float。
int a = 3;
int b = a++; //执行完后,b=3。先给b赋值,再自增。
System.out.println("a="+a+"\nb="+b);
a = 3;
b = ++a; //执行完后,b=4。a先自增,再给b赋值
System.out.println("a="+a+"\nb="+b);
逻辑运算符
位运算符
&和|既是逻辑运算符,也是位运算符。如果两侧操作数都是 boolean 类型,就作为逻
辑运算符。如果两侧的操作数是整数类型,就是位运算符。
不要把“^”当做数学运算“乘方”,是“位的异或”操作
条件运算符
int score = 80;
int x = -100;
String type =score<60?"不及格":"及格";
int flag = x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println("type= " + type);
System.out.println("flag= "+ flag)
type= 及格
flag= -1
简单的输入和输出
import java.util.Scanner;
public class Welcome2 {
public static void main(String[ ] args) {
Scanner scanner = new Scanner(System.in);
// 将输入的一行付给 string1
String string1 = scanner.nextLine();
// 将输入单词到第一个空白符为止的字符串付给 string2
String string2 = scanner.next();
// 将输入的数字赋值给变量
int a = scanner.nextInt();
System.out.println("-----录入的信息如下-------");
System.out.println(string1);
System.out.println(string2);
System.out.println(a * 10);
}
}