入门基础(一)"/>
JAVA入门基础(一)
一.JAVA是什么编译型语言还是解释型语言?
1.计算机如何识别java程序
翻译:将高级语言转换成计算机认识的二进制代码的过程
高级语言易于程序员编写代码,完成需求,但计算机并不认识高级语言,所以计算机需要进行将高级语言进行翻译:翻译有两种
第一种是编译 第二种是解释
目前大部分翻译的过程都需要一个中间过程:
源程序------------中间代码-------------目标代码
2.分类
编译是通过编译器将源程序一次性翻译(并进行对应格式的包装)成对应的目标代码.
编译是在运行整个代码前一次性完成的,编译成一个可执行文件,例如在java中就是.CLASS文件
编译型语言可移植性差,但效率高
解释是在运行时才会逐行执行.
解释型语言效率差.
很明显,这分别需要解释性和编译器
2.java的核心优势是什么,sun公司又是怎么实现这个优势的?
首先要清楚Java的语言类型,我们知道C,C++是编译型语言,并且编译C的过程比较繁琐,涉及到很多过程的转换,同时编译型语言与特定的系统有关,脱离环境可移植性较差.
而python是解释性语言.
JAVA即是编译型语言也是解释型语言
最初的翻译过程如下:
.JAVA---编译---.CLASS---解释---OS
java程序解释的环境是java特有的JVM(java virtual machine)
也就是说Java程序首先是通过编译后再通过JVM进行逐行解释,而后JVM和操作系统进行交互.
我们知道由于解释性语言是逐行操作的,效率较低,而编译型语言是一次完成,效率高,但可移植性差.
而sun公司通过开发了三种不同环境下的JVM(windows、linux、mac)
这样一来,极大的增强了java程序的可移植性,所以Java的核心技术点就是跨平台性.
在java刚出来的时候,很多人不看好,因为解释性语言的效率低下,但oracle和sun公司通过不断地优化,java在原有可移植性强的优势上,逐渐弥补了效率短板的不足
java有个''盗版'',是谁大家心里都清楚,但是Java已经占据大量市场了,某#已经吃不到那份红利了.
二.java的三大版本
1.面向个人计算机的JAVASE(JAVA STARD EDITION)
2.面向企业服务器版本的JAVAEE(JAVA ENTERPRISE EDITION)
3.面向消费性电子产品版本的JAVAME(JAVA MICRO EDITION)
三.java三大环境包
1.JVM.JRE.JDK
简单来说.
JDK是运行java程序的环境.
JRE是在JVM的基础上,添加了库函数等.
而JDK则是在JRE的基础上添加了编译器和调试器
三者为不同的人群服务.如果你只想运行Java程序,JRE足矣
而如果你要开发java程序则需要JDK.
四.学习语言核心技能.
认识bug----修改bug(底层程序员悲哀的早年(35)生活)
五.JAVA基本语法规范
1.java是大小写敏感的语言 例如 HELLO WORD 和 hello word是完全不同的(sql是大小写不敏感的)
2.java的类名规范:对于类说 java类的首字母应该大写,当由多个单词组成时,每个单词的首字母大写,其余字母小写
3.方法名规范:方法名应该以小写字母开头,当由多个单词组成时,除了第一个单词外,每个单词的首字母大写(好奇怪的规则)
4.源文件命名规范:源文件应该与类名名称相同,否则会编译出错
5.主程序入口:sout(bushi 滑稽)public static void main (String arg[]) 开始执行
6.标识符命名:A-Z,a-z,$,_开始,之后可以是A-Z,a-z,$,_,数字的组合
7.java修饰符:
访问控制修饰符:
修饰保护能力从小到大:public protect default private
非访问控制修饰符:
final abstract static synchronized
8.java变量:局部变量 (类变量)静态变量 (成员变量)非静态变量
java中的变量基础是一部分需要梳理的
在java中我们会了解到很多不同类型的变量:局部变量、全部变量、类变量、静态变量、非静态变量、实例变量、成员变量
提到变量,我们都会想到一些特征:首先就是变量的作用域,其次是生命周期等等.
变量概念:
局部变量和成员变量:
成员变量是指能够描述类的某一个属性,否则它就应该定义为局部变量.
例如写在成员方法内部的变量就是局部变量.
成员变量和局部变量的不同:
成员变量 局部变量
1.作用范围不同 定义在类内 在整个类中都可以被调用 只定义在局部范围内
2.伴随着随着对象的创建而存在、消失而结束存在于堆中 存在于栈中作用范围结束变量自动释放
3.成员变量有默认初始化值 局部变量没有默认初始化值
这就意味着成员变量不需要人为初始化 而局部变量必须认为初始化,否则报错
class demo_test{String S;//成员变量public static void main(String[] args) {demo_test demo= new demo_test();//对象调用成员变量System.out.println(demo.S);}//null
}//可以看到 在java中 如果不对成员变量初始化 是不会报错的class demo_test{public static void main(String[] args) {String S;//局部变量System.out.println(S);}//输出结果:java: 可能尚未初始化变量S
}//可以看到 在java中 如果不对局部变量初始化 是会报错的//具体原因可能是因为局部变量所在栈内存不断被覆盖,不适合自动初始化,而成员变量在堆中开辟时就以默认初始化值存在
这里就涉及到了一个常考点:就近原则 通常与this.var和super 使用
事实上是java在找变量时,先在局部范围时找,如果没找到就会去成员变量中找
静态变量和非静态变量
事实上,非静态变量就是成员变量,成员变量又名实例变量(服了)
静态变量最明显的特征就是被 static关键字所修饰
例如 public static void main(),这里曾经有一道面试题,为什么非得用public static void修饰主函数
JVM调用是属于外部类调用,必须是PUBLIC类型
static保证了main不需要实例化对象再执行
void是空的返回值,如果改成其他,则会编译出错,因为返回的值必须被处理
如果一个变量要被定义为全局变量,则应该被定义为静态变量,即这个变量被类的所有对象共享,没有被静态修饰的变量,属于类的特殊描述
静态变量 | 成员变量 |
生命周期不同:静态变量与类的生命周期共存亡 | 成员变量随着类的创建而创建,类的消失而消失 |
调用对象不同:可以被类和对象调用 | 只能被对象调用 |
别名不同:类变量 | 实例变量 非静态变量 |
储存位置不同:方法区的静态区 | 堆内存 |
静态变量也有初始化值
另一种说法:成员变量=实例变量+静态变量
有待考证
9.外部类与内部类
在java中规定,文件名必须与类名相同.
外部类是由于内部类存在的.外部类通过对象实例化调用内部类的方法和变量
更多推荐
JAVA入门基础(一)
发布评论