这里我就不再说一遍了,请同学们看我的这篇博客:Java学习前的准备
补充:idea中是有中文插件的,需要的自行百度
public class helloworld{
public static void main(String[] args){
System.out.println("hello world");
}
}
在这里我们再解析一遍这个程序:
准备好这些,我们就开始学习吧
我们知道,我们新建一个C语言文件是以.c或.cpp为后缀的,而Java文件以.java为后缀,一个.java文件中可以定义多个类,但只能定义一个public修饰的类,每一个类中都能定义一个main方法(方法类似于C中的函数),对.java文件编译后,每个类都会生成一个.class文件,我们可以运行有main方法的.class文件(这些只当作一个可选的学习点,后面会具体学习)
Java和C中的运算都是通过补码进行的
与c语言一样,java中的关键字也不能被用作变量名,常见的java关键字如下:
abstract、assert、boolean、break、byte、case、catch、char、class、const、continue、default、do、double、else、enum、extends、final、finally、float、for、goto、if、implements、import、instanceof、int、interface、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while
是不是看得头疼,没关系,这种关键字我们以后一个一个学,还有很多和C语言中的差不多,并不是很难学。
另外true、false、null这三个用来给部分数据类型赋值的字符串也不能被用作变量名
Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使
用。自己命名标识符时要避免使用这些保留字:如goto、continue
标识符:Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。
其实就是:凡是自己可以起名字的地方都叫标识符 。
比如:类名、变量名、方法名、接口名、包名…
标识符命名错误将不能通过编译!
Java 中的名称命名规范:
用于在内存中保存数据
这些数据如果我们只创建而不初始化,我们将无法使用(报错),不使用的话可以通过。
字符串属于类
包括:实例变量,类变量(static修饰的)
包括:形参(方法、构造器中定义的变量),方法局部变量(在方法内定义),代码块局部变量(在代码块内定义)
同:二者都具有生命周期
异:局部变量除形参外,都需要初始化
上面都看不懂?没关系哈哈,讲解在后面,前面只是让你们知道有这个东西。
在Java中可以在数字中间加上下划线,方便看出数字的位数,而不会有其它影响:
一个问题:-128的补码是?
如图,255的补码是11111111,因此最后的二进制结果就是a的补码(对每一位,a为1则为1,a为0则为0),即1000000,因此我们知道-128的补码为10000000,我们可以倒退出来它的原码是00000000,我们也可以这样想:-127的补码是10000001,那么它再减去1就是-128,也就是10000000
2. Java 的整型默认为 int 型,声明 long 型常量须后加‘ l’ 或‘ L’,建议写成’L’,不容易与1搞混
定义long型变量时不在数字后加’L’,整数默认为int型,超出范围,报错
加上’L’,默认创建8个字节
3. java 程序中变量通常声明为int型,除非不足以表示较大的数,才使用long
与C语言不同,Java中字符采用Unicode编码,一个字符占用两字节,而这一个字符可以储存字母、汉字、平假名、片假名等
Java中也有转义字符,与C语言大致相同
字符类型不能为空(但字符串类型可以)
Java中字符表示语法与C相同,但Java中还可以用Unicode值表示:’\uXXXX’,其中每个X对应一个十六进制位。这类似于用ASCII码值表示字符。
char类型是可以参与运算的,因为每个字符都有对应的Unicode码值
对char型变量赋值时也可以直接用Unicode码值
例如:char a=97;a即为’a’
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
图中b1与i1运算,b1被提升为int型与i1相加,得到int型结果,,无法赋给byte型变量
自动类型转换 :容量小的类型自动转换为容量大的数据类型。
把int型结果赋给int型变量和long型变量都可以,说明发生了自动类型转换
数据类型按容量大小排序为:char、short、byte
这里short型赋给double型变量自动提升为double型
特别注意:byte,short,char 之间不会相互转换,他们三者在计算时首先转换为int类型,即使两个byte类型变量相加仍然会转换为int型
c1与i3相加得到int型结果赋给i4,这样是正确的
这里印证了上述的规则:byte、char、short两两相加都得到int型(即使相同类型两个变量相加也是这样)
boolean 类型不能与其它数据类型运算。
boolean 类型不可以转换为其它的数据类型 。
注意:当把任何基本数据类型的值和字符串(String,S大写)进行连接运算时(即+运算),基本数据类型的值将自动转化为字符串类型 。
使用示例:
强制类型转换:自动类型提升运算的逆运算。
Java中的数据在计算机中也是以补码形式储存的(请复习原码、反码、补码)
八进制,十六进制与C语言相同。
Java中没有无符号数。
我们看到,结果的返回值为String型
同理,我们还可以使用以下方法:
1. 十进制转换为八进制:Integer.toOctalString(int i);
2. 十进制转换为二进制:Integer.toBinaryString(int i);
3. 其他进制转换成十进制:Integer.parseInt(String s, int radix);这个方法比前面的更强大,s对应的是你需要转换的字符串,radix是这个字符串的进制数,示例:
+、-、*、/、%、++、–等用法与C语言中大致相同
特殊:+可以连接字符串
介绍几个易错点:
=、+=、-=、/=、*=、%=等用法与C语言中大致相同
==,!=,<,>,>=,<=等用法与C语言中大致相同,instanceof
&,&&,|,||,!,^等用法与C语言中大致相同
<<、>>、&、|、~、^与C语言中用法大致相同,>>>
int num1=10,num2=20,tmp;
方式一:定义临时变量的方式
推荐的方式
tmp = num1;
num1 = num2;
num2 = tmp;
方式二:好处:不用定义临时变量
弊端:相加操作可能超出存储范围
有局限性:只能适用于数值类型
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
方式三:使用位运算符
有局限性:只能适用于数值类型
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
(条件表达式)?表达式1:表达式 2;与C语言中用法大致相同
如何从键盘获取不同类型的变量:需要使用Scanner类,具体步骤如下
class ScannerTest{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);//实例化Scanner类,scan就是它的一个对象
System.out.println("请输入你的姓名:");
String name = scan.next();//要求用户输入一个String型
System.out.println(name);
System.out.println("请输入你的芳龄:");
int age = scan.nextInt();//要求用户输入一个int型
System.out.println(age);
System.out.println("请输入你的体重:");
double weight = scan.nextDouble();//要求用户输入一个double型
System.out.println(weight);
System.out.println("你是否相中我了呢?(true/false)");
boolean isLove = scan.nextBoolean();//要求用户输入一个boolean型
System.out.println(isLove);
//对于char型的获取,Scanner没有提供相关的方法。只能获取一个字符串,但我们可以用charAt();这个方法来获取字符串中的字符
System.out.println("请输入你的性别:(男/女)");
String gender = scan.next();//输入男
char genderChar = gender.charAt(0);//获取索引为0位置上的字符,括号里的参数为获取字符的下标,下标从0开始,这个方法调用的格式先记着就好
System.out.println(genderChar);//结果为男
}
}
package check;
public class retryLearn {
static void retryContinue() {
System.out.println("执行retryContinue:");
int i = 0, j = 0;
retry:
for (i = 0; i < 2; i++) {
for (j = 0; j < 5; j++) {
System.out.println(j);
if (j == 3) {
continue retry;
}
}
}
System.out.printf("after loop, i = %d, j=%d", i, j);
}
static void retryBreak() {
System.out.println("执行retryBreak:");
int i = 0, j = 0;
retry1:
for (i = 0; i < 2; i++) {
for (j = 0; j < 5; j++) {
System.out.println(j);
if (j == 3) break retry1;
}
}
System.out.printf("after loop, i = %d, j=%d\n", i, j);
}
static void whileLabel() {
System.out.println("执行whileLabel:");
int i = 0;
int j = 0;
whileLabel:
while (i++ < 10) {
while (j < 10) {
System.out.println(j);
if (j == 6) break whileLabel;
++j;
}
}
System.out.printf("after loop, i = %d, j=%d\n", i, j);
}
public static void main(String[] args) {
retryContinue();
System.out.println("***********************");
retryBreak();
System.out.println("***********************");
whileLabel();
}
}
这里用了别的博主的东西,原文链接:Java中的goto
6. for-each,即增强for循环,我们会在学到数组的时候讲解,这里先放一放
我们知道,C语言为我们提供了大量的函数,同样地,Java为我们提供了大量的方法,我们会在以后的学习中慢慢积累这些方法,在这里,我们先简要介绍三个方法