java简介:
Java语言主要特点:
(1)简单性:
Java是纯面向对象语言,语法简单明了,易于掌握。
Java使用接口取代了多重继承,并且取消了指针,因为多重继承和指针会使程序变得复杂。
Java还会自动地收集内存垃圾,使得内存管理变得更为简单。
Java还提供了丰富的类库、API文档以及第三方开发包,还有大量Java的开源项目。
(2)面向对象性:
面向对象性事Java语言的基础。
java语言提倡“万物皆对象”,语法中不能在类外面定义单独的数据和函数。
Java语言最外部的数据类型是对象,所有的元素都要通过类和对象来访问。
(3)分布性:
Java的分布性包括:1.操作分布。2.数据分布
⑴操作分布:即在多个不同的主机上不知相关操作。
⑵数据分布:将数据分别存放在不同的主机上,这些主机是网络中的不同成员。
(4)可移植性:
Java程序具有与体系结构无关的特性。
Java的类库也提供了针对不同平台的接口,所有这些类库也可以被移植。
(5)安全性
Java语言删除了类C语言的指针和内存释放等语法,有效地避免了用户对内存的非法操作
Java程序代码要经过代码程序校验、指针校验等很多测试步骤才能够运行。所以未经允许的Java程序不能出现损害系统平台的行为。
Java可以编写出防病毒和防修改系统。
(6)健壮性
Java会检查程序在编码和运行时的错误,并消除错误。
(7)多线程性。
Java应用程序可以在同一时间并行执行多项任务。而且相应的同步机制可以保证不同线程能够正确地共享数据。
(9)高性能性
Java编译后的字节码是在解释器中运行的,所以它的速度较多数交互式运用程序提高了很多。
(9)动态性
Java可以动态调整库中方法和增加变量,并且客户端不需要任何更改。在Java中进行动态调整是非常简单和直接。
Oracle为什么收购Sun公司?
从市场上的商用体系开发来讲,开发结构一共分为四层:操作系统、数据库、中间件、编程语言。Oracle为了完成与微软的对等体系,所以才收购的Sun公司。
Java语言的三个程序分支:
J2SE:包含Java语言核心的类。(比如数据库连接,接口定义,数据库连接,输入输出,网络编程)
J2EE:包含J2SE所有的类,还含有开发企业级应用的类。
J2ME:用于消费类电子产品软件开发。
Java可移植性基本原理:
虚拟机没有跨平台性,各种系统上要装不同版本的虚拟机,但是虚拟机向上的接口都一样,java程序不直接跟操作系统打交道,而是要通过虚拟机来执行,所以就有跨平台性了。
编译型语言和解释性语言区别:
编译型语言:像C语言编译后出现.exe文件,供用户使用。
解释性语言:像ASP语言,直接将代码放在服务器上进行解析执行。
Java是两种类型语言的集合,Java处理代码过程:Hello.java,编译==》Hello.class,解析==》Hello,不同版本的JVM匹配不同的操作系统。
JDK的安装与配置:
JDK包括JRE、开发工具、编译器。
JRE包括Java虚拟机、Java核心类库和支持文件。
JVM是Java虚拟机,负责运行Java程序。
安装JDK之后,需要对两个操作命令java.exe和javac.exe进行配置。因为这两个命令不是windows命令,需要配置Path环境属性,在我的电脑==》属性==》高级==》环境变量==》系统变量。
配置是否成功,在运行输入cmd==》javac==》正确展示javac信息。
注意:安装JDK时需要关闭防火墙。
javac.exe:Java的编译器,负责把.java文件编译成.class文件。
java.exe:Java的解释执行器,运行class文件并输出结果。(先编译后执行)
第一个程序解析:
public class 定义:类的名称必须和文件的名称保持一致,否则程序无法被编译。在一个*.java中只能有一个public class。
class 定义:类的名称可以和文件的名称不一致,但是生成的是class定义的名称。在一个*.java程序中可以存在多个class的定义,编译后分为不同的.class文件。
一个*.java源文件中,是否可以包括多个类,有什么限制?
在一个*.java源文件中可以有多个class定义,但只能用有一个public class 定义。
在练习中,一个*.java程序中会同时存在public class和class定义的类,而在以后编码中,一个*.java文件中基本上都只包含一个public class,不会有其他的class存在。
主方法:main()
主方法是一个类的起点,所有的程序代码都是由此开始顺序执行。
系统输出:System.out.println()
输出后加换行:System.out.println(输出内容);
输出后不加换行:System.out.print(输出内容);
CLASSPATH:
JVM在运行时需要通过CLASSPATH加载所需要的类,默认情况CLASSPATH指向当前目录,改变则从用户指定的目录加载类,但是任意指定CLASSPATH不可取。做好做法是从当前所在的路径下加载所需要的*.class,将CLASSPATH设置为“.”,即SET CLASSPATH=.(“.”为默认配置)
以后一些其他程序会自动修改本机的CLASSPATH,导致一些程序无法运行,这种情况下需要手动配置。
Java中PATH和CLASSPATH区别:
PATH:是操作系统的环境属性,指的是可一执行命令的程序路径。
CLASSPATH:是所有*.class文件的执行路径,java命令执行时利用此路径加载所需要的*.class文件。
Java程序执行步骤:
(1)使用javac命令将一个*.java文件编译成*.class文件。
(2)使用java命令执行*.class文件。
Java注释:
单行注释://
多行注释:/…/
文档注释:/**…*/
Java标识符和关键字:
标识符,在程序中用于定义名称都为标识符,有文件名称、类名称、方法名称、变量名称等等。
标识符定义格式,字母、数字、_、 组成,不能重复,不能以数字开头,不能为java关键字,每一个标识符都有自己的意义。方法名和变量名采用小驼峰命名。
关键字也称为保留字,用作特殊的标记使用,如public、class、char、break、final等等。
Java数据类型:
基本数据类型不涉及开辟内存,引用数据类型涉及内存开辟。
基本数据类型:byte、short、int、long、float、double、char、boolean;
引用数据类型:类、接口、数组;
常用的数据类型:
byte型:数据传输使用此类型,IO和编码转换都使用byte型;
short型:
int型:只要见到整数的定义, 其类型都是int型;
long型:表示日期时间或者文件长度使用long型;
float型:
double型:只要见到小数的定义, 其类型都是double型;
boolean:用于逻辑操作;
byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0;
short:短整型,2个字节(16 bit),取值范围-32768~32717,默认值0;
int:整型,用于存储整数,在内存中占4个字节,取值范围-2147483648~2147483647,默认值0;
long:长整型,在内存中占8个字节-2^63~2^63-1,默认值0L;
float:浮点型,在内存中占4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0;
double:双精度浮点型,用于存储带有小数点的数字,在内存中占8个字节,默认值0;
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
类(Class):所有的类,无论是Java自身已经存在的,还是用户后来创建的;
Objec类:它是所有类的父类,每个类都实现这个类的方法;用Object 可以定义所有的类;
String类:它代表字符串;
接口(interface): 系统自带或者用户创建的;
数组(array): 系统自带或者用户创建的;
编码习惯,每个操作之间都要有个空格;(例如:int x = 10;)
所有的变量在使用之前都要赋予默认值;(例如:int x = 10;)
byte b = 20;(20是int型,但是这个值在byte范围,自动转换为byte型)
int型和long型做运算时,会自动转换为long型;(小类型转换到大类型为自动转换)
long型要转换为int型,需要强转,前提在int范围内转换不会报错内存溢出;(大类型转换到小类型需要强转)
自动转换(由小到大):byte->short->int->long->float->double;
强制转换(由大到小):double->float->long->int->short->byte;
注意:编码时尽量不要转换,能使用double型尽量使用double型,不要使用float型;
char,就是’’;
Java使用的是UNICODE编码,不是ASCII编码,这是一个十六进制定义的编码,可以表示出任意数字,其中包括中文编码的定义;
UNICODE设计时候就包括所有的ASCII编码,有一部分编码完全和ASCII编码重复,但是许多编码ASCII编码时没有的;
boolean:用于逻辑判断,只有两个值,true和false;
String类型:
任何数据类型遇到String变量的“+”操作都会自动变为String类型数据;
public class TestAddress {
public static void main(String[] args) {
double x = 10.2;
int y = 20;
System.out.println("加法运算结果:"+x+y);//加法运算结果:10.220
System.out.println("加法运算结果:"+(x+y));//加法运算结果:30.2
}
}
运算符
开发中,运算符优先级没必要去记住,提倡多使用“()”去改变优先级;
开发中,本着编写“简单代码”这一原则;常用的有:三目运算符,逻辑运算符,位运算符;
三目运算符:是一种赋值运算符;
逻辑运算符:与(多个条件一起满足)、或(多个条件一个满足)、非(非true即false);
位运算符:包括&、|、^、~、>>、<<、>>>,所有的位运算都采用二进制数据进行。
十进制数据转换二进制数据原则,数据除2取余,最后倒着排列;
请问如何更快的计算出2的3次方?
int x = 222;显然不是最快的,int x = 2; x << 2;
请解释&和&&、|和||的区别?
逻辑运算上:
&:表示普通与,所有的判断都要依次执行;
&&:表示短路与,若干个条件,如果前面的条件返回了false,那么后面的不做判断,结果为false;
|:表示普通或,所有的判断条件都要依次执行;
||:表示短路或,若干个条件,如果前面的条件返回true,那么后面的不做判断,结果返回true;
位运算上:&表示位于运算;|表示位或运算;
程序结构:
(1)顺序结构:
(2)选择(分支)结构:if、if…else、if…else if…else、swith;
(3)循环结构:while循环(while循环和do…while循环)、for循环;
break:跳出当前循环;
continue:终止当前循环,但是不跳出循环(在循环中continue后面的语句是不会执行了),继续往下根据循环条件执行循环。
return:中断函数执行,返回调用函数处。
常量和变量的区别:
常量是固定值,不可改变。例如int x=10;10就是固定数值,不能改变。x是个标记;
变量是利用声明式方式将内存中的某个内存块保留下来以供程序使用,可以声明式的数据类型为整型、字符型、浮点型或其他类型。变量用来存储数据,使用变量必须先声明它的数据类型。
方法重载的概念并举例说明:
方法重载是方法名相同, 参数类型或个数不同,调用的时候会按照传递的参数类型和个数完成不同的方法体的执行。
public class TestDemo {
public static void main(String[] args) {
System.out.println(add(10, 20));//方法重载一
System.out.println(add(10, 20.0));//方法重载二
System.out.println(add(10.0, 20, 30.000));//方法重载三
}
public static int add(int x, int y){
return x + y;
}
public static double add(int x, double z){
return x + z;
}
public static double add(double x, double y, double z){
return x + y + z;
}
}