关于Java
硬件,设备,软件,操作系统,应用软件。
编程语言本质是用来做什么的?
本质是:工具。
用编程语言实现我们美好的梦想。
赚钱。
相识贵相知,相知贵知心。
学习好java我们可以做些什么?
Java工程师
JavaEE工程师
Web工程师
UI工程师
Android工程师
微信开发
云计算Hadoop
Java架构师
Java创始人及java的由来:
高斯林 c语言。1.内存溢出。2.exe不能跨平台
C语言 简化和修改。C--。
编程语言 oak----爪哇岛JAVA bean javabean,netbean,entitybean
Java历史:
95年发布 Sun公司发布java 1.跨平台2.自动内存回收
99年SUN公司发布Java的三个版本:标准版(JavaSE,以前是J2SE)Standard、企业版(JavaEE以前是J2EE)和微型版(JavaME,以前是J2ME) android
Java1.1,java1.2 ,1.3
2004年发布java5 javase javaee,javame
2009年归oracle,并在2011年出来1.7版本 74亿美元 CTO
2014年3月19日,甲骨文公司发布java8.0的正式版
www.oracle.com
简单:
C++语言等都有指针的概念,在java里面没有这个概念,并且由程序产生的内存被自动回收
当然更重要的还是后面学习的面向对象才有体现。对象完成所有工作。
Java跨平台:一次写好,处处运行。不需要针对每个使用者重新写一个程序。
95年java一公布就受到热捧,并在此后迅速发展,成为最受欢迎的开发语言,恰好internet高速发展,java与网络天生搭档。最适合做b/s程序。B指browser,S指server。
安全性:严格遵循面向对象的规范。这样封装了数据细节,只提供接口给用户。增加了数据级的安全性
无指针运算。java中的操作,除了基本类型都是引用的操作。引用是不能进行增减运算,不能被直接赋予内存地址的,从而增加了内存级的安全性。
数组边界检查。
面向对象(开发思维区别):与面向过程的c语言是有差别的。
造车。
“面向过程”,就是先造车轮,再造发动机,再造机壳。。。。。依次制造,造完前面的,才能造后面的。
“面向对象”,就是不分前后,造完所有的(车轮,发动机,机壳。。。),再组装起来。面向的是具体的事物。
银行卡
Class Card{
String cardNo;
Double banlance;
Public void deposit(){
}
Public void withdraw(){
}
}
Card a=New Card();
Card b=New Card();
a.withdraw(100);
垃圾回收:c语言析构函数,回收变量占用的内存,java则是自动回收,不用担心内存溢出。
内存溢出:内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存
开放性:
Java的jdk是完全开放的,所以他获得了巨大成功,不断使用java,不断改进java。
想想c语言咋整的?开发源代码------编译文件生成.obj二进制文件,和一些库文件结合成exe文件,这些文件都直接就是二进制机器码,并且跟当前操作系统有关。(与操作系统相关所以转到别的操作系统可能不能运行)----计算机运行
开发源代码----编译源文件生成中间字节码文件.class文件(不是二进制代码)-------jvm根据操作系统翻译该中间文件(这个文件与具体机器和操作系统无关)----机器指令---运行
安装一个虚拟机,jre,注意与jdk区别。包含与被包含的关系
Jre:java runtime environment java运行时环境,包括了jvm
Jdk:java development kit java开发工具包,为开发人员服务的。包含了jre
Jvm< jre < jdk
常用的dos命令:
cd---切换目录
notepad 文件名---创建记事本
mkdir 文件夹名称—创建文件夹
dir-----显示文件列表
下载:java官网就是oracle官网。
http://www.oracle.com/technetwork/java/index.html
jdk-7u4-windows-x64.exe
根据操作系统位数安装对应版本,目前准备采用java1.7(注意32位和64位不同)
默认java安装完毕,会安装到C:\Program Files\Java\jdk1.7.0_04
设置环境变量
为何配置path和classpath?
设置path:因为我们的控制台要运行可执行文件,那么这个文件必须在当前目录下。
或者在path下。
.; 搜索当前目录 C:\Program Files\Java\jdk1.7.0_04\bin;自动搜索jdkbin目录
配置classpath:C:\Program Files\Java\jdk1.7.0_04\lib 因为这个路径下面全部都是class文件
搜索当前目录,classpath配置的目录
写第一个java程序。HelloOracle.java
public class HelloOracle{
//属性+功能
public static void main(String[] args){
System.out.println("Oracle,一个靠谱的平台!");
}
}
任何一个java文件都必须定义一个类,类里面有一个main函数,这个函数就是程序执行的开始。
Java编码规范:
http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-139411.html
编译,运行
编译命令采用javac HelloOracle.java
运行命令 java HelloOracle
一定注意:javac后面跟的是java文件名和扩展名。Java后面跟的是java的类名。
Java运行的时候会用到jdk里面的库包lib。通过java –verbose:class可以清楚看到class
加载到内存的全部过程。
Java –verbose:gc 可以查看垃圾回收情况。
注意:如果你写的java程序放到某个包里面,要注意编译和运行的时候命令
注意:如果有包名 javac d:/test/com/action/HelloAction.java 假设HelloAction在包com.action
运行:java –classpath d:/test com.action.HelloAction 或者先切换到d:/test 然后运行java com.action.HelloAction
Dos常用命令:
切换盘符,比如从c盘到d盘:d: 回车
如果是相同盘符下面的路径切换:cd 路径
直接在当前盘符路径下面建立一个java文件,notepad HelloOracle.java 回车
查看当前路径下面的所有文件 dir
也可以查看以exe或者其他扩展名结尾的文件:dir *.exe 回车
将生成的Hello.class演示跨平台。在Linux下是否运行。
免费的,出现是因为java当时比较火。IBM公司投巨资开发eclipse 日蚀 java sun
Eclipse kepler,galio
工具一:Eclipse Kepler版本下载
http://www.eclipse.org/downloads/
使用:
解压即可。进入eclipse文件夹点击exe文件,运行即可。
工具二:NetBeans
https://netbeans.org/downloads/
近期部分企业采用的: IntelliJ IDEA—适合开发复杂项目,提示智能化。但是商业版都是收费的,也有社区版。
用javap –c XXX.class生成一个jvm指令集组成的方法体集合。
Java被编译之后class文件分为头部和常量区。
头部包含Java的版本信息,以16进制打开。
每个class文件的头4个字节称为魔数(Magic Number),其值为:0xCAFEBASE,它的唯一作用是用于确定这个文件是否为一个能被虚拟机接受的class文件。使用魔数而不是扩展名来进行识别主要是基于安全的考虑,因为文件的扩展名可以随意地被改动。
如果被篡改魔数会出现java.lang.ClassFormatError: Incompatible magic value 3305028286 in class file Hello
魔数后面跟的就是版本号。用的1.7所以应该是51,十六进制应该是33.
public class ClassTest {
private String itemS ="我们 ";
private final int itemI =100 ;
public void setItemS (String para ){...}
}
而这些在JVM解释执行程序的时候是非常重要的。那么编译器将源程序编译成class文件后,会用一部分字节分类存储这些永恒不变的红色东西。而这些字节我们就成为常量池。事实上,只有JVM加载class后,在方法区中为它们开辟了空间才更像一个“池”。
正如上面所示,一个程序中有很多永恒的红色东西。每一个都是常量池中的一个常量表(常量项)。而这些常量表之间又有不同,class文件共有11种常量表,如下所示:
常量表类型 |
标志值(占1 byte) |
描述 |
CONSTANT_Utf8 |
1 |
UTF-8编码的Unicode字符串 |
CONSTANT_Integer |
3 |
int类型的字面值 |
CONSTANT_Float |
4 |
float类型的字面值 |
CONSTANT_Long |
5 |
long类型的字面值 |
CONSTANT_Double |
6 |
double类型的字面值 |
CONSTANT_Class |
7 |
对一个类或接口的符号引用 |
CONSTANT_String |
8 |
String类型字面值的引用 |
CONSTANT_Fieldref |
9 |
对一个字段的符号引用 |
CONSTANT_Methodref |
10 |
对一个类中方法的符号引用 |
CONSTANT_InterfaceMethodref |
11 |
对一个接口中方法的符号引用 |
CONSTANT_NameAndType |
12 |
对一个字段或方法的部分符号引用 |