入门之旅
一、JDK环境的配置
1、自己下载并安装JDK
2、环境变量配置
1、右键桌面上“我的电脑”>>“属性”,在弹出的页面上点击“高级系统设置”。
2、在弹出的“系统属性”窗口中“高级”标签页下点击“环境变量”按钮。
3、在弹出的“环境变量”窗口中,点击下方的“新建”按钮,在弹出的“新建系统变量”窗口中,新建一个名为“JAVA_HOME”的环境变量,变量值为Java的安装路径。本人路径为
4、设置Path环境变量,该变量已经存在,所以在列表中选择Path,点击下方的“编辑”按钮,在弹出的窗口中添加如下信息:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin,然后点击“确认”按钮即可。如图所示:
5、和JAVA_HOME一样,新建一个名为“classpath”的环境变量,变量值为:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。如图所示:
6、在配置好环境变量后,可以进入cmd中检查Java是否安装正确,检查的命令为 java -version,如图所示:
二、基础语法
1.最简单输出格式
System.out.println("hello word");
2.标识符
(1)Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。凡是自己可以起名字的地方都叫表示符,都遵循表示符的规则。
(2)Java标识符命名规则:
标识由字母、下划线、美元符或数字组成。
标识符应以字母、下划线、美元符开头。
标识符大小写敏感,长度无限制。
(3)不成文规定:Java标识符选取应注意见名知意且不能与Java语言关键字重命名。
标识符举例:
合法标识符 | 非法表示符 |
---|---|
HelloWorld | class |
DataClass | DataClass# |
_123 | 12.3 |
$xx | Hello Word |
3.关键字
(1)Java中一些赋以特定的含义,用作专门用途的字符串称为关键字。(大多数编译器都会将关键字用特殊方式标出)
(2)所有Java关键字都是小写字母
(3)goto 和 const虽然从未使用,但也被称为Java的关键字保留。
goto 关键字很早就在程序设计语言中出现。事实上,goto 是汇编语言的程序控制结构的始祖:“若条件 A,则跳到这里;否则跳到那里”。若阅读由几乎所有编译器生成的汇编代码,就会发现程序控制里包含了许多跳转。然而,goto 是在源码的级别跳转的,所以招致了不好的声誉。若程序总是从一个地方跳到另一个地方,还有什么办法能识别代码的流程呢?随着 Edsger Dijkstra 著名的“Goto 有害”论的问世,goto 便从此失宠。
————————————————
版权声明:本文为CSDN博主「淡紫色呼吸」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jinghuayuanli/article/details/16844765
(4)Java关键字一览表
4.常量
Java的常量值用字符串表示,区分为不同的数据类型:
(1)整型常量如123
(2)实型常量(浮点数)3.14
(3)字符常量’ a’
(4)逻辑常量true,false
(5)字符串常量"HelloWorld"
注、要区分字符常量和字符串常量,字符常量用单引号,字符串常量用双引号。
5.变量
(1)Java变量是程序中最基本的存储单元,其包括变量名、变量类型和作用域。
(2)Java程序中每一个变量都属于特定的数据类型,在使用前必须对其声明。例如:
int i = 100;
float j = 3.14f;//在Java中声明float类型时常量后面必须带f,否则编译器会将该变量当成double类型来处理
double h1,h2,h3=3.14;
String s = "HelloWord"
(3)从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每个变量使用前必许先声明,然后必须进行赋值来填充内容,最后才能使用。
(4)变量类型
*按被声明的位置分:
局部变量:方法或语句块内定义变量,方法体内部是指与方法对应的大括号内部。
成员变量:方法外部、类的内部第一的变量。
*按所属数据类型分:
基本数据类型变量。
引用数据类型变量。
a)基本数据类型
a_1逻辑类型boolean
boolean类型适用于逻辑运算,一般用于程序流控制,其只允许取值true或false,不可以取0或非0的整数代替true或false,这一点和C语言不同。
a_2字符型char
字符型常量为用单引号括起来的单个字符,例如:
char a = 'b'; char c = '国'
Java字符采用Unicode编码,每个字符占两个字节,因而可以用十六进制编码形式表示,例如:
char = '\u0061'//其中Unicode是全球语言同意编码
Java语言中还允许使用转义字符’ \ '来将其后的字符转变成其他的含义,例如:
char e = '\n'//其中‘\n’代表换行符
a_3整数类型
*Java各整数类型有固定的表示范围和字符长度,其不受具体操作系统的影响,以保证Java的可移植性。
*Java语言整形常量的三种表示形式:
十进制整数,如123,0,325
八进制整数,要求以0开头如0123
十六进制整数,要求以0x或0X开头,如0x123
*Java语言的整形常量默认为int型,声明long型常量可用在后面加‘l’或‘L’,如:
long i = 500l;
long i2 = 33333333333L;后面必须加L,否则出错。
*Java整型的适用范围如下表所示:
a_4浮点类型
a)与整数类型类似,Java浮点型有固定的表数范围和字段长度,不受平台影响,
b)Java浮点数类型常量有两种表数形式:
I.十进制数形式,如3.14、314.0、314
II.科学技术法形式,如3.14e2、3.14E2、100E-2
III.Java浮点型常量默认为double型,如要声明一个常量为float型,则需在数字后面加f或F,如:
double d = 123.456;
float f = 123.456f;//后面必须加f或F,否则出错。
*Java浮点型的适应范围如下表所示:
b)基本类型转换
b_1boolean类型不可以转换为其他数据类型。
b_2整型、字符型、浮点型的数据在混合运算中相互转换,转换时遵循一下原则:
*容量小的类型自动转换为容量大的数据类型,数据类型按容量大小排序如下:
byte,short,char—>int—>long—>float—>double
其中byte,short,char之间不能互相转换,他们三者在计算时首先会转换为int类型。
*容量大的数据类型转换为容量小的的数据类型时要加上强制转换符,但可以造成精度降低或溢出,使用要格外注意。
*有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
*实数型常量默认为double。
*整数常量默认为int。
b_3类型转换举例
c)运算符
Java语言支持一下运算符:
算数运算符:+,-, * ,/,%,++,- -
关系运算符:>,<,>=,<=,==,!=
逻辑运算符:!,&,|,^,&&,||
位运算符:&,|,^,~,>>,<<,>>>
赋值运算符:=
扩展赋值运算符:+=,-=, * =,/=
字符串连接符:+
c_1自加自减运算符
c_2逻辑运算符:
逻辑非 !
逻辑与 &
逻辑或 |
逻辑异或 ^
短路与 &&
短路或 ||
&和&&:当且仅当 a、b 都为 true 时,结果为 true ;
| 和 || : 当且仅当 a、b 都为 false 时,结果为 false ;
^ : a 与 b 相异时,结果为 true ;
注意:逻辑运算符操作的都是boolean类型的变量,而且结果也是boolean类型。
逻辑运算符实例:
c_3赋值运算符和扩展赋值运算符
*当 “=” 两侧数据类型不一致时,可以使用默认类型转换或使用强制类型转换原则进行处理。注:可以将整型常量直接赋给byte、short、char等类型变量,而不需要进行强制转换,只要不超过其表示范围。
*扩展赋值运算符如下表所示:
c_4字符串连接符
*“ + ”除了用于算术加运算以外,还可以用于对字符串进行连接操作。如:
int = 1 + 3;
String s = "Hello" + "World";
*“ + ”运算符两侧的操作数中只要有一个是字符串类型,系统会自动将另一个操作数转换为字符串然后再进行链接。
c_5表达式
表达式是符合一定语法规则的运算符和操作数的序列。
表达式的类型和值:
|.对表达式中操作数进行运算得到的结果称为表达式的值。
||.表达式值的数据类型即为表达式的类型。
表达式的运算顺序:
|.应按照运算符的优先级从高到低的顺序进行。
||.优先级相同的运算符按照事先约定的结合方向进行。
表达式优先级书下图所示:
c_6三目条件运算符
三目条件运算符格式:x?y :z
其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算结果为表达式y的值,否则整个运算结果为表达式z的值。
三目运算符的简单实例:
6.语句
6.1 if语句和switch语句
6.1.1 if语句:
6.1.2 if语句举例如下:
6.1.3 switch语句:
注:case语句后一般要加break;语句;多个case可以合并在一起;default可以省略,但不推荐这样做;Java中switch语句只能探测int类型值。
switch语句举例:
6.2 for循环语句
6.2.1 for循环语句形式:
for(表达式1;表达式2;表达式3){语句;…}
其执行过程:首先计算表达式1,接着执行表达式2,若表达式2的值为true。则执行语句接着计算表达式3,再判定表达式2的值;依次重复执行下去,直到表达式2的值为false。
注:for语句的三个表达式都可以省略。
for(;;){
}
6.2.1 for循环语句举例:
6.3 while语句和do-while语句
6.3.1 while语句
语句形式:
while(循环条件){
执行内容
}
执行过程:先判断循环条件,如果等于true则执行其后面的语句,然后再次判断条件并反复执行,直到条件不满足为止。
6.3.2 do-while语句
语句形式:
do{
执行内容
}while(循环条件)
执行过程:先执行内容,在判断循环条件为是否true,否则运行结束。
6.3.3 while语句和do-while语句举例:
6.4 break语句和continue语句
6.4.1 break语句
break语句用于终止某个语句块的执行,用在循环体语句中,可以直接跳出循环。
break简单举例:
break还可以加“名字”跳出循环;
这里就是在break后面加上了OUT,break返回的名字必须是大写!!!
6.4.2 continue语句
continue语句用在循环体内,用于终止某次循环过程(这里和break语句不同,break是直接跳出循环,而continue是跳过这一次循环两者有很大不同),跳过循环体中continue语句下面执行的循环,并开始下一次循环过程。
continue语句举例:
6.5 return语句
return语句可以从一个方法返回,并把控制权交给调用它的语句。
public void getName{
return name;
}
三、类与对象
1.面向对象
面向对象语言具有如下特征:
面向对象是一种常见的思想,比较符合人们的思考习惯;
面向对象可以将复杂的业务逻辑简单化,增强代码复用性;
面向对象具有抽象性、封装、继承、多态等特性。
面向对象的编程语言有:C++、Java、C#等
1.1类也是一种对象
类,什么是类,它是相当于一系列对象的抽象,就比如书籍一样,类相当于书的封面,大多数面向对象的语言都使用class来定义类,它告诉你它里面定义的对象都是什么样的,我们一般使用下面来定义类
class ClassName{
//body
}
上面,你声明了一个class类,现在,你就可以使用new来创建这个对象
//类名 对象名称 = new 类名();
ClassName classname = new ClassName();
一般,类的命名遵循驼峰式,他的定义如下
驼峰式命名法(Camel-Case)又称驼峰式命名法,是电脑程序编写时的一套命名规则(惯例)。正如他的名称ClassName所表示的那样,是指混合使用大小写字母来构造成变量和函数的名字。程序员们为了自己的代码更容易的在同行之间交流,所以多采取统一的可读性比较好的命名方式。
1.2对象的创建
在Java中,万事万物都是对象。这句话相信你一定不陌生,尽管一切都是看作是对象,但是你操纵的确是一个对象的引用(reference)。在这里有一个很形象的比喻:你可以把车钥匙和车看作一组对象引用和对象的组合。当你想要开车的时候,你首先需要拿出车钥匙点击开锁的选项,停车时,你需要点解加锁来锁车。车钥匙相当于引用,车就是对象,由车钥匙 来驱动车的加锁和开锁。并且,即使没有车的存在,车钥匙也是一个独立的存在的实体,也就是说,你有一个对象引用,但你不一定需要一个对象与之关联,也就是
Car carKey;
这里创建的只是引用,而非对象,但如果你想要使用这个引用时,会返回一个异常,告诉你需要一个对象来和这个应用进行关联。一种安全的做法是,在创建对象引用时同时把一个对象赋给它。
Car carKey = new Car();
在Java中,一旦创建了一个引用,就希望它能与一个新的对象进行关联,通常使用new操作符来实现这一目的。new的意思是,给我一个新对象,如果你不想相亲,就自己new一个对象就好了。
1.3属性和方法
类一个基本的要素就是有属性和方法。
属性也称为字段,他是类的重要组成部分,属性可以是任意类型的对象,也可以是基本数据类型。例如
class A{
int a;
Apple apple;
}
类中还应该包含方法,方法表示的是做某些事情的方式。方法其实就是函数,只不过Java习惯把函数称之为方法。这种叫法也体现了面向对象的概念。
方法的基本组成包括 方法名称、参数、返回值和方法体,下面是他的实例
public static void 方法名称(){
方法体
}
public int getResult(){
//...
return 1;
}
其中,getResult就是方法名称,()里面表示方法接收的参数、return 表示方法的返回值,注意:方法的返回值必须和方法的参数类型保持一致。有一种特殊的参数类型——void表示方法无返回值。=={}==包含的代码段被称为方法体。
1.4构造方法
在Java中,有一种特殊的方法被称为构造方法,也被称为构造函数、构造器等。在Java中,通过提供这个构造器,来确保每个对象每个对象被初始化。构造方法只能在对象的创建时期调用一次,保证了对象初始化的进程。构造方法比较特殊,他没有参数类型和返回值,它的名称要和类的名称保持一致,并且构造可以有多个,下面是构造方法的示例
class Apple{
int sum;
String color;
public Apple(){}
public Apple(int sum){}
public Apple(String color){}
public Apple(int sum,String color){}
}
上面定义了一个Apple类,你会发现这个Apple类没有参数类型和返回值,并且有多个一Apple同名的方法,而且各个Apple的参数列表都不一样,这其实始终多态的体现,后面我们会说。在定义完成构造方法后,我们可以能够创建一个Apple对象了
class createApple{
public static void main(String[] args){
Apple apple1 = new Apple();
Apple apple2 = new Apple(1);
Apple apple3 = new Apple("red");
Apple aplle4 = new Apple(2,"color");
}
}
如上面所示,我们定义了四个Apple对象,并调用了Apple四种不同的构造方法,其中,不加任何参数的构造方法被称默认的构造方法,也就是
Apple apple1 = new Apple();
如果类中没有定义任何构造方法,那么JVM会为你自动生成一个构造方法,如下
class Apple{
int sum;
String color;
}
class createAopple{
public static void main(String[] args){
Apple apple1 = new Apple();
}
}
上面代码不会发生编译错误,因为对象包含了一个默认的构造方法。
默认的构造方法也被称为默认构造器或者无参构造器。
这里有一点需要注意的是,即使JVM会为你默认田间一个无参的构造器,但是如果你手动定义了任何一个构造方法,JVM就不会在为你提供默认的构造器,你必须手动指定,否则会出现编译错误。
显示的错误是,必须提供Apple带有int参数的构造函数,而默认的无参函数没有被允许使用。
1.5方法重载
在Java中一个很重要的概念是方法重载,它是类名的不同表现形式,我们上面说了构造函数,其实构造函数也是重载的一种。另外一种就是方法的重载
public class Apple{
int sum;
String color;
public Apple(){}
public Apple(int sum){}
public int getApple(int sum){
return 1;
}
public String getApple(String color){
return "color"
}
}
如上面所示,就有两种重载的方式,一种是Apple构造函数的重载,一种是getApple方法的重载。
但是这样就涉及到一个问题,要是有几个相同的名字,Java如何知道你调用的是那个方法呢?
这里记住一点即可。**每个重载的方法都有独一无二的参数列表。**其中包括参数的类型、顺序、参数数量等,满足一种一个因素就构成了重载的必要必要条件。
请记住一下重载的条件:
方法名称必须相同
参数列表必须不同(个数不同、或类型不同、参数类型排列不同等)
方法的返回类型可以相同也可以不相同
仅仅返回类型不同不足以成为方法的重载
重载是发生在编译时的,因为编译器可以根据参数的类型来选择使用哪个方法。
1.6方法的重写
方法的重写与重载虽然名字很相似,但却完全是不同的东西。方法重写描述是对子类和父类之间的。而重载是指的同一类中的。实例代码如下:
class Fruit{
public void eat(){
System.out.println("eat fruot");
}
}
class Apple extends Fruit{
@Override
public void eat(){
System.out.println("eat apple");
}
}
上面这段代码描述的就是重写的代码,你可以看到,子类Apple中的方法和父类Fruit中的方法同名,所以我们能够推断出重写的原则
重写的方法必须要和父类保持一致,包括返回值类型,方法名,参数列表也都要一样
重写的方法可以使用@Override注解来表示
子类中重写方法的访问权限不能低于父类中的访问权限
2.初始化
2.1类的初始化
上面我们创建出了一个Car这个对象,其实在使用new关键字创建一个对象的时候,其实调用了这个对象无参数的构造方法进行的初始化,也就是下面这段代码
class Car{
public Car(){}
}
这个参数的构造函数可以隐藏,有JVM自动添加。也就是说,构造函数能确保类的初始化。
2.2成员初始化
Java会尽量保证每个变量的初始化,初始化涉及两种初始化。
(1)一种是编译器默认指定的字段初始化,基本数据类型的初始化。
一种是其他对象类型的初始化,String也是一种对象,对象的初始化值都为null,其中也包括基本数据类型的包装类。
(2)一种是指定的初始化,例如
int a = 11;
也就是说,指定a的初始化值不是0,而是11.其他基本类型和对象类型也是一样的。