java特点:
1.跨平台性
2.简单性,相对于C++,java就是借鉴于C++,而简单性就体现在java中只支持单继承,C++中就支持多继承
3.java是纯粹的面向对象语言
程序的运行方式有两种:
编译 编译器: ->机器码文件
解释 解释器: ->逐行翻译并执行
所以编译方式运行效率高,但是不能跨平台
解释方式可以跨平台,只要提供相应的平台解释器
java是先编译后解释
.java源文件->.class字节码文件->解释运行
.class可以跨平台,这也是为什么说java可以跨平台的原因
JVM+解释器=JRE(Java Runtime Environment:java运行环境)
JVM:java虚拟机,屏蔽不同OS(操作系统)的差异
编译器+JRE+工具+类库=jdk(java开发工具包)
一个类编译后对应一个.class文件
一个源文件可以定义多个类
一个源文件只能定义一个公开类,公开类名只能与文件名相同
java的环境变量的配置:
系统变量JAVA_HOME:设置为java的安装目录,这个变量时告诉操作系统java的安装路径,当其它程序需要java支持的时候,就可以通过该变量来找到java安装路径
PATH:增加java安装目录的bin目录,在命令行输入指令时,用来指示操作系统去哪个路径下找java的相关程序
CLASSPATH:设置为".",不要引号,表示为当前目录,为虚拟机提供.class文件的路径
在命令行执行java代码
在不没有将java代码放入包时:
在命令行进入源代码存放的文件夹,如源文件名为:test.java,这时,使用javac test.java命令编译源代码,生成test.class文件,这个文件放在与test.java文件同级的目录下,然后命令行输入java test,即可运行
在将java代码放入包时:在java源代码的第一行写入:pakeage p1;即将接下来要写的test类放入p1这个包中,这时候编译命令为:javac -d . test.java,表示将生成的test.class文件放入与test.java文件同级目录下的p1文件夹中,p1是编译自动生成的文件夹,然后命令行输入:java p1.test即可运行
为什么要引入包呢?引入包可以避免类名的冲突java.lang包是java中最常用的包,在java源文件中自动引入了这个包
byte 1个字节 -128~127
short 2个字节 -32768-32767
int 4个字节
long 8个字节
float 4个字节
double 8个字节
char 2个字节 0~65536
计算机内部使用的是二进制表示,在小数的表示过程中可能会产生精度上的损失
public class test{
public static void main(String[] args){
double a=2.0-1.1;
System.out.println(a);
}
}//输出为:0.8999999999,而不是我们想象的0.9,这就相当于用十进制难以表示1/3一样
3/2这样的表达式的值其实为1,而不是1.5,这是由于3和2都是int型的数据,根据自动类型提升规则3/2这样的表达式也应该是int型,相当于(int)1.5,即强制转换,而要得到想要的1.5,则应该这样写:3.0/2,3.0小数默认为double型,3.0就是double型,自动类型提升,则3.0/2的类型就应该是double型
a=5;
a++和++a其实最后都把a的值加了一,a最后都等于6,区别在于a++和++a这两个表达式的值,表达式其实也是有值的,a++的值是a在加一之前的值即a++的值为5,++a则是a在加一之后的值即++a的值为6.a--和--a同理
a+b这个表达式的值就是b的值(不确定),我在输出a+b的值时输出的确实是a加上b之后的值
在及java中不存在函数的概念,函数其实就在方法,在java中给函数另取了一个名字就是方法
函数的作用:
1.减少冗余代码
2.提高代码的可维护性
3.让程序更加的灵活
判断一个数是否是质数:
public static boolean isPrime(int a){
for(int i=2;i<=Math,sqrt(a);i++){
if(i%2==0) return false;
}
return true;
}
数组的扩容其实就是重新创建一个更大的数组,将原数组的元素都复制到新数组,然后把新数组的地址赋给原数组即可
public static int[] expand(int[] a){//数组的扩容
int[] newarray=new int[a.length*2];//扩容两倍
System.arraycopy(a,0,newarray,0,a.length);//二维数组也可
return newarray;
}
Array.copyof(a,a.length*2);//利用函数扩容,a表示原数组,a.length*2表示扩容后的长度