Java基础语法
第一章:基础常识
常用的DOS命令
JAVA语言概述
-
语言特性
由C和C++继承了许多成分,变量声明、操作符、参数传递和控制流程等完全相同。
纯粹的面向对象
舍弃了指针(以引用取代)、运算符重载、多重继承等
增加了垃圾回收、泛型编程、类型安全的枚举、不定长参数和自动装/拆箱
易学
分布式
健壮:丢弃指针,自动回收(免去了程序员忘记回收的问题)
开源社区成熟
解释型
原生多线程
-
JAVA技术平台
SE:俗称核心JAVAJAVA学习流程
Java是一个统称 包含javase 与Javaee(还有一个几乎没人用的javame) 是Sun公司,也就是现在的Oracle(把Sun给收购了)公司的一门面向对象的开源语言。
javase 是java的一部分,也是基础的基础,主要是用来做桌面程序的,就像我们平时下载用的那些软件,也就是楼上说的那些客户端程序。但是用Java做软件的话,前途不明朗。
jsp 是一种动态的页面,运行于服务器(tomcat、 jboss等),里面可以嵌套有html 或javase、Javascript的代码。
至于javaweb那就大了,它包含了以上所有的东西,并且还有一些框架(例如 spring struts hibernate ibatis 。。。。)关于开发javaweb的框架大约有几百种之多(当然平常你掌握几种就可以了,其他的框架,用到了,现学就可以了)。
要想学好Javaweb,Javase这个基础的基础必须要打好。尤其是Javase里面集合,io流,网络。。。等这几大块是重点的重点。
至于学习顺序 Javase --》jsp --》javaweb。
看到jsp的时候,可以写一些页面的东西,算是基本的web程序吧。 -
JAVA核心机制
-
垃圾回收(GC)
C++手动回收的优点:能够在内存不使用时快速回收,准确高效缺点:容易失误,出现bug
JAVA使用系统级线程自动检测回收,优点:自动,不会出现bug
缺点:回收不及时(在硬件水平较高的现在,可以忍受:宁可回收不及时,但是一定要回收)
-
题外话:Windows x86是32位系统,x64是64位系统
狭义的x86架构,指只支持32位的intel/AMD/VIA的CPU,并向下兼容16位(实模式);
狭义的x64架构,指的是支持32位和64位的intel/AMD CPU,指令集与x86兼容,并向下兼容16位(实模式),目前绝大多数民用CPU和服务器CPU都是这样的;
狭义的ia64架构,指的是安腾系列的CPU,虽然指令集也是64位的,但不兼容32位,intel独有的,这种CPU比较少见,基本不生产了,近似于淘汰的状态;
广义的x86架构,泛指支持x86和x64架构intel、amd的CPU,但不包含ia64(安腾)。
目前市面上能看到的E5没有安腾架构的(安腾是独立发布的),绝大多数E5都支持x64
-
正规的开发工作中,不同的任务对JAVA版本的要求不一样,同时进行多个任务时版本不同会出问题:使用压缩版jdk,根据情况解压不同版本使用
换开发版本时,在环境变量中改JAVA_HOME即可(将其改为对应版本的文件夹)所以要用压缩版 -
JDK与JRE
-
编译过程
.java->.class->.exe -
注意代码规范和可读性!!
-
Java语言的一些要点
-
Main方法的固定书写格式:
public static void main(String[]args){...}
-
严格区分大小写
-
语句以;结束
-
-
常见问题及解决办法
声明为public的主类必须与文件名一致 -
注释
-
注释类型
@author:写作者@version:写版本
-
第二章:JAVA基本语法
JAVA基础
-
保留字
尽量不要在编程中使用保留字 -
标识符
-
标识符要求
数字不可以开头 -
命名规范(很重要)
总的来说可以分为四类:- 包名所有字母小写常
2.常量名所有字母大写,单词间下划线连接
3.类名、接口名使用大驼峰命名法
4.变量名、方法名使用小驼峰命名法
- 包名所有字母小写常
-
-
变量
-
保存在内存中
-
JAVA中的每个变量都必须先声明后使用
-
变量在一对{}中有效
-
数据类型
声明long型常量需要后加'l'或'L',float型后加'f'或'F' -
Boolean类型:只能使用true或false,不能用0或者非0来定义
-
引用类型,初始化时都可以初始化为null
-
字符串值不可变
这里的s0和s1、s2都引用了同一个字符串同样的字符串只会储存一遍(注意如s2这样的也是一样的)
-
开发环境(Eclipse)
- Workspace:利用工作空间维护不同项目
- System.out.printLn()一般用于日志的输出
数据类型
-
数据类型转换
要点:1. 计算时向上转换? 2.byteshortchar均转换为int
? 3.任何基本类型与字符串连接,均转为字符串
运算符
-
自增自减
自增自减运算符区分
符号在前:先运算再取值
在后:先取值再运算
- 取模
- 模数为负时,负号可忽略;但被模数为负则不可忽略,应正常运算
- char类型与string类型的区分
单引号引起来的是字符(char),双引号引起来的是字符串(string)
第一个,char在+运算符中转换为了int,做了数学运算
第二个因为第一个是string,在+运算符中做了向上的数据类型转换,转换为了string,做了字符串拼接
- 拓展赋值运算符
除了加减,乘除、取模其实都有拓展赋值运算符的!
这是个之前没有注意过的点,对变量进行运算时要考虑到其类型的变化,否则会报错(可能是JAVA的特性?)
所以,自增的时候用自增运算符比用加法语句更好
- 逻辑运算符
-
异或:相同是为false,不相同时为true
-
JAVA中判断条件只能是单向的 -
逻辑与(&)和短路与(&&)的区别:
之前在C++中常用的都是短路运算符在不需要逻辑运算两边都参与运算的时候(也就是绝大多数时候),尽量使用短路运算符&&和||
-
位运算符
用的比较少其实
有符号的右移时看首尾,是0补0,是1补1
无符号均补0
解释: -
三目运算符
(条件表达式)?表达式1:表达式2;
如果条件表达式为true,则执行表达式1,否则执行表达式2
-
运算符的优先级
数组
-
一位数组的声明方式:
int a[];或者int[] a;
-
初始化:
- 动态初始化
-
int[] arr=new int[3];
-
arr[i]=x;i=0,1,2
2. 静态初始化
-
int a[]=new int[]{3,9,8};
-
int[] a={3,9,8};
注:对于int[] a和int a[]这两种方式,上面的初始化方法都是可以的
-
? 数组初始化后,每个数组都有一个length属性指明它的长度(和C++不同,可以直接调用属性获得长度)
-
使用动态初始化时,数组的元素默认值是0,对象的默认类型为null
-
多维数组
相比C++,有了原生支持的多维数组
可以只定义n-1维的大小,留下一个未定义的维度 -
特殊写法:
int[] x,y[];这里的x是一维数组,而y是二维的(有点反直觉2333)
-
总结:一维数组和二维数组的各种写法
-
一维数组:
- int[]x
-
int x[]
-
二维数组:
-
int[][][] []y
-
int[]y[]
-
int y[] []
反正就是要凑够两个括号,这两个括号怎么搁都是可以的
-
-
包
- 使用包的必要性
- 解决重名问题
- 便于管理
- package中用.表示包的层次(包的概念等同于文件夹的概念,可以有多级)
- 可以Import具体的包下的对象