在搭建java运行环境前,要了解java语言的特性: 1、面向对象编程: 面向对象是符合人的思维逻辑的一种方式,这种编程更容易使人理解。例如想要去写一个学生的数据库的时候,就要对学生定义一个类,这个类称为学生类,如果想要去存储小红同学的数据,就要创建这个小红对象,通过这个对象去编写程序。这就是面向对象编程。 2、简单性: java的简单性,例如java中不支持多继承,因为多继承比较复杂,一旦两个父类都有同名同参数的方法,一旦子类调用就会出现安全问题。而java中不支持实现多继承,但是一个类实现多个接口,而接口里不能实现方法,只能定义方法,要让类里去实现方法,就避免了安全问题。 3、跨平台性:因为java和其他语言不同,在编译之后会形成一个class字节码文件,这个字节码文件是通过java虚拟机来转换成汇编再转换成二进制文件的,而这个java虚拟机在不同操作系统上都有相对应的版本,而用户只需要拿出class字节码文件,到各个操作系统上的java虚拟机来运行这个代码,效果是一样的,所以java语言的跨平台性就是这样的。 4、健壮性:由于java语言中具有c语言中没有的垃圾回收机制,使得程序员在编写代码时不需要考虑内存分配的问题。垃圾回收机制又简称GC回收机制。 5、安全性:例如java中取消了指针的概念,因为指针可以随意指向内存区域,容易造成混乱。
了解了java特性之后,就要搭建运行的环境: 首先去官网下载JDK工具包http://www.oracle.com,因为JDK是程序员开发的运行环境的必要工具包,在安装JDK的时候会发现里面还有个JRE,所以讲讲JDK和JRE的区别,JDK中包含了JRE,JRE是运行的必要环境,也就是没有开发环境,只有运行环境,是给用户使用的。而JDK是开发运行的环境,是给程序员使用的。JRE中包含了java虚拟机(JVM)。工具包安装好之后,还需要编译工具。暂时采用EditPlus工具。另外系统运行的环境变量也要配置好。
java文件的编译和运行过程是怎么样的? 编译阶段:主要检查java源程序的正确性,如果检查没有错误就生成class字节码文件。它在DOS界面的代码是:javac 路径/文件名.java 运行阶段:class字节码文件载入JVM中解释运行。它在DOS界面的代码是:java 类名
另外还有扩展的内容: 常用的DOS命令: exit 退出命令窗口 cls 清屏 DOS窗口中的内容怎么复制:在DOS窗口的任意位置,选中你想要复制的文本,然后点击鼠标右键,在空白处点击鼠标右键,粘贴你复制的文本 dir 列出当前目录下的文件和子目录 cd 可以完成目录的切换 用法:cd 目录的路径 目录的路径包括相对路径和绝对路径 绝对路径:表示该路径从某个磁盘的盘符下作为出发点的路径 相对路径:表示该路径从当前所在的路径下作为出发点的路径 cd … 回到上级目录 cd \ 直接回到根目录 c: 直接切换盘符,不需要加cd
尝试编写第一个helloworld:
public class HelloWorld { public static void main(String[] args) { System.out.println("helloworld"); } }上述代码需要记忆的几个知识点: 1、Helloworld是类体 2、main是主方法体 3、System.out.println(“helloworld”);是java语句。 java语句不能直接在类体中写,要在方法体里写。一个java文件只有一个public class,而且后面接的类名必须和java文件名一致。但是可以定义很多个class,而且每定义一个class,就会生成一个字节码文件。
标识符: 标识符是在java语言中有权利自己定义的名称称为标识符。 标识符有几个命名规则(必须遵守): 1、不能以数字开头,通常是以英文字母开头,但是可以以_和$开头。
public class HelloWorld { public static void main(String[] args) { int _=0; int $=0; } }2、严格区分大小写。 3、不能和关键字重复。
标识符有几个书写规范(可以不遵守,但是实际开发中非常重要,尽量遵守): 1、见名知意 2、类名和接口:例如public class HelloWorld,interface HelloWorld,首字母大写接下来每个单词首字母大写。 变量名和方法名:例如public static void printWord,int printWord,首字母小写接下来每个字母首字母大写。 包名:例如package age.cc.power,全部小写。 常量名:例如final int AGE,全部大写。
java中基本数据类型:后面数字代表所占空间大小(单位:字节) 1、整数型:byte1、short2、int4、long8 2、字符型:char2 3、浮点型:float4、double8 4、布尔型:boolean1 一个字节等于8个比特位:01010101,并且最左边的数字代表符号位,0代表整数,1代表负数。
什么是变量? 变量本质上来说是内存中的一块空间。
为什么存在数据类型? 因为数据要分配内存空间,需要定义大小。
变量的要求? 存储的数据必须和定义的类型一致。
变量的定义与修改: 如果一个变量定义好了,就不能重新定义。但是可以修改存储的数据。
根据变量的作用域来分类变量: 1、局部变量:在方法体之内,只能在方法体内发挥作用 2、成员变量:是类的属性,在类体中书写。根据不同的修饰符,作用域的大小也随之不同。
番外:如果想在终端打印"",就要使用\转义符,例如\t代表一个制表符
System.out.println("\"\"");关于数据类型之间的互相转换的规则: 1、小的数据类型可以自动转换为大的数据类型,例如:
byte a=100; int b=a;2、大的数据类型转换成小的数据类型的时候,称为强转,需要加(转换类型),但是可能会有精度损失,例如:
byte a=100; int b=a; byte c=(byte) b;3、boolean数据类型不能转换 4、整数型字面量没有超出byte,short,char的取值范围,可以直接将其赋值 5、byte、short、char、类型混合运算,先各自转换成int再运算,例如:
char c='a'; int a=10; System.out.println(a+c);6、多种数据类型混合运算,各自先转换成最大的数据类型再运算。
番外:一切计算机存储的数据格式是二进制的补码。
算术运算符: + 求和 - 相减 * 乘积 / 商 % 取余 ++ 自加1 – 自减1 算数运算符中的i++和++i有什么区别? i++是先赋值再做自加1,而++i是先自加1然后再赋值。
int c=1; System.out.println(++c);//2 System.out.println(c++);//1关系运算符: > >= < <= == != 关系运算符的输出结果永远是布尔型数据。
System.out.println(1>2);//false逻辑运算符: & 逻辑与(可以翻译成并且) | 逻辑或(可以翻译成或者) ! 逻辑非(取反) && 短路与 || 短路或 短路与和短路或有什么特殊之处? 短路与在处理左边的内容时,如果左边的输出是false,则右边的代码不执行,输出直接为false。 短路或在处理左边的内容时,如果左边的输出是true,则右边的代码不执行,输出直接为true。
int a=1; System.out.println(2>1||a++>1);//true System.out.println(a);//1赋值运算符:=、+=、-=、*=、/=、%=
三目运算符:布尔表达式?表达式1:表达式2,如果布尔表达式为true,则输出表达式1,反之,输出表达式2。
System.out.println(2>1?1:2);//1“+”的拼接: 1、如果加号两边都是整数型数据,就进行加法处理。 2、如果加号两边其中一个是字符串型数据,就做字符串拼接。
System.out.println("ad"+12);//ad12键盘等待输入:
java.util.Scanner s=new Scanner(System.in);//创建一个键盘输入器对象 String i=s.next();//键盘输入器对象调用next()方法,来将键盘输入的数据赋值给字符串i控制语句: 常用的控制语句分为3大类: 1、选择语句:if、switch 2、循环语句:for、while、do while 3、转向语句:break、return、continue break是终结循环语句的,还可以防止switch中case分支穿透现象
for (int i=0;i<10;i++){ System.out.println(i); if(i==5){ break; } }//012345 public class Test { public static void main(String[] args) { int i=1; switch (i){ case 1: System.out.println(1); break; default: System.out.println("false"); } } }//1,而不是1 falsereturn是终结类方法的,如果return后面接数据,就是这个方法返回的数据,需搭配返回值类型使用。
public class Test { public static void main(String[] args) { System.out.println(Add.add());//46 } } class Add{ public static int add(){ return 23+23; } }continue是跳过当前,继续执行下一个。
public class Test { public static void main(String[] args) { for(int i=0;i<5;i++){ if(i==3){ continue; } System.out.println(i);//0124 } } }为什么要有方法: 因为在实际开发中,会有很多重复的代码块,业务逻辑相同,重复去写会造成很多不必要的麻烦,要是有了方法,就只需要写一次,想要再去使用就可以调用这个方法。
方法的语法机制: [修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体; } 注意:返回值类型如果是void的时候,是无返回值的,方法体中不可以有return 数据;如果返回值类型有数据类型,那么必须有return 相应类型的数据;
public class Test { public static void main(String[] args){ Method01.sum(100,200);//300 Method01.sum(300,400);//700 } public static void sum(int x,int y){ int z = x + y; System.out.println(z); } }重载机制就是相同的方法名,但是形式参数不同,执行的方法体不同。好处是便于代码的编写,更加整洁。
public class OverLoad { public static void main(String[] args){ System.out.println(sum(1,2));//3 System.out.println(sum(1L,2L));//3 System.out.println(sum(1.0,2.0));//3.0 } public static int sum(int a,int b){ return a+b; } public static long sum(long a,long b){ return a+b; } public static double sum(double a,double b){ return a+b; } }何为递归? 一个方法的方法体中调用了自己的方法,叫做递归。 例如使用递归来写一个简易for循环。
public class Test { public static void main(String[] args){ System.out.println(forTest(1,5)); } public static int forTest(int a,int b){ if(a<b){ System.out.println(a); return forTest(++a,b); }else{ return b; } } }//12345