java入门
java版本分类:j2SE(标准版)、j2ME(移动版)、j2EE(企业版)。
Java特性和优势 :简单性、面向对象、可移植性(跨平台)、高性能、分布式、动态性、多线程、安全性、健壮性。
JDK :java Development KIt,JDK包含JRE。
JRE:Java Runtime Environment,JRE包含JavaSE和JVM。
JVM :java Virtual Machine。虚拟计算机。
Java程序运行机制
编译型 :源文件经过编译器编译成.exe文件。
解释型 :源文件经过编译器生成字节码.class文件,在经过解释器解释给操作系统执行操作。
IDE(集成开发环境)
- IDEA(现在流行)
- eclipse
- ……
Java基础
注释
-
单行注释:用//进行单行注释
-
多行注释:/*
……
*/进行多行注释
-
文档注释:/**
* @Author参数作者
*/
书写注释是一个好习惯!
标识符
- 所有的表示符都应该以字母,美元符或者下划线开头。
- 首字符之后可以是字母、美元符、下划线和数字的任何字符组合。
- 不能用关键字作为变量名和方法名。
- 标识符大小写敏感。
- 可以用中文,但是不建议使用。
关键字
数据类型
强类型语言 :要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
弱类型语言 :要求变量使用可以不符合规定,所有变量不一定要先定义才使用。
java为强类型语言!
Java的数据类型分为两大类 :
-
基本类型:
数值类型:*一个字节8个位-00000000
整型: byte(1字节)、short(2字节)、int(4字节)、long(8字节)、
浮点型:float(4字节)、double(8字节)
字符型:char(2字节)
boolean类型:占一位
-
引用类型:类、接口、数组
类型转换
强制类型转换 :高到低, 比如:int a = 30;short b = (short)a;
自动类型转换 :低到高。
注意:
* 1.不能对布尔值进行转换
* 2.不能把对象类型转换成不相干的类型
* 3.强制转换
* 4.转换是可能出现内存溢出
变量
-
变量:可以变化的量,代表一个内存空间。内存相当于一家酒店,变量为酒店的房间。
-
java是强类型语言,变量必须先声明其类型;
-
java变量是程序中最基础的存储单元,其要素包括变量名、变量类型和作用域。
注意:
1. 每个变量都有数据类型,类型可以是基本类型,也可以是引用类型。
2. 变量名为合法的标识符
3. 变量声明是一条完整的语句,因此每个声明都必须以分号结束。
变量的作用域
类变量
static修饰的变量为类变量。
实例变量
类中方法外的变量。
局部变量
方法中的变量。
变量名命名规范
- 所有变量、方法、类名:见名知义
- 类成员变量:首字母小写和驼峰原则:monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线
- 类名:首字母大写和驼峰原则
- 方法:首字母小写和驼峰原则
常量
常量初始化后不能被改变,不会变动值。
常量名一般大写字符。
运算符
- 算术运算符:+、-、*、/、%、++、–
- 赋值运算符:=
- 关系运算符:>、<、>=、<=、==、!=、instanceof
- 逻辑运算符:&&、||、!
- 位运算符:&、|、^、~、>>、<<、>>>
- 条件运算符:?:
- 扩展赋值运算符:+=、-=、*=、/=
运算符优先级 :
包机制
包其实就是一个文件夹。
包的命名规则:一般利用公司域名倒置作为包名。例如:www.baidu.com 命名为com.baidu.www.
包中的源文件需要在第一行添加,package 包名。需要用其他包中的类,需要import 包名。
javaDoc
用idea生产文档:击 Tools-> Generate JavaDoc。注意:编码的设置
-encoding utf-8 -charset utf-8
Java流程控制
Scnner对象
该对象可以获取用户的输入。
对象实例:
Scanner s = new Scanner(System.in);
//s.next(),获取下个字符 不能获取的空格的字符串,以空格为结束。
//s.nextLine(),获取一行,可以获取空格,以回车为结束。
顺序结构
java的基本结构就是顺序结构,一般都是一句一句去执行。
顺序结构是最简单的算法结构。
它是任何算法都离不开的结构。
选择结构
if 单选择结构
if(条件){
满足条件,执行语句;
}
if双选择结构
if(条件){
满足条件,执行语句;
}else{
不满足条件结构;
}
if多选择结构
if(条件1){
满足条件1,执行语句;
}else if(条件2){
满足条件2,执行语句;
}else if(条件3){
满足条件3,执行语句;
}else if(条件4){
满足条件4,执行语句;
}else{
上述条件都不满足,执行语句;
}
if嵌套结构
if(){
if(){
}else{
}
}else{
if(){
}else if{
}else{
}
}
Switch多选择结构
switch语句中类型可以是byte、short、int、char、int、、Character、String(jdk7之后支持).
switch(expression){
case value:
执行语句;
break;
case value:
执行语句
break;
default:
执行语句;
}
循环结构
while循环
while(条件){
//循环内容
}
条件最后在某时刻会为false。如果一直为true,则为死循环。避免死循环。
do…while循环
do{
执行语句
}while(条件);
先做一次,再判断是否在继续循环。而while先判断再循环。
for循环
for(初始化;条件;更新){
执行语句;
}
注意:
1、初始化可以为空
2、循环开始先执行初始化——》判断-》执行语句-》更新;再接着第一次循环知道条件不符合跳出循环。
增强型for循环
for(声明语句:表达式){
执行语句
}
//主要用于遍历数值
break、continue、goto
break:强行结束循环,也叫跳出循环。
continue:结束本次循环,进行下次循环。
goto:java中未正式使用
Java方法
Java方法是语句的集合,他是实现一个功能。一个方法只实现一个功能。
- 方法是解决一类问题的步骤的有序集合。
- 方法包含于类中
- 方法在程序中被创建,在其他地方被引用
方法的定义
修饰符 返回值类型 方法名(参数类型 参数名,....){
方法体
return 返回值;
}
/*
*修饰符:修饰符,这个是可选的,告诉编译器如何调用该方法,定义该方法的访问类型。
*返回值类型:方法可能有返回值,也有可能没有返回值。没返回值用void,返回值着看返回值的类型。
*方法名:是方法实际的名字,方法名和参数表共同构造方法签名。
*参数类型:参数就像是一个占位符,当方法被调用是,传递值给参数。这个值被称为实参,参数列表是指方法吃的参数类型、顺序个参数个数。参 *数是可选的。
*参数名:参数的名字
*方法体:方法执行的语句
**/
//加法方法
//例子
public static int add(int a ,int b){
return a+b;
}
在java中参数都是值传递。
静态方法:当方法被static修饰,则为该方法为静态方法。该方法和类一起加载。
非静态方法:当没有被static修饰,则该方法为非静态方法。该方法和对象一起加载。
方法调用
方法的重载
重载就是在一个类中,有相同的方法名称,但是参数形式不同。
方法的重载的规则:
- 方法的名称相同。
- 参数列表必须不同。
- 返回值可以相同也可以不同。
- 仅仅返回类型不同不足以称为方法的重载。
实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等逐个去匹配,以选择对应的方法,如果匹配失败,则编译器报错。
可变参数
在方法的声明中,在指定参数类型后添加一个省略号(…)。
在方法中指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
//例子
public class Method_Demo02 {
public static void main(String[] args) {
Method_Demo02 method_demo02 = new Method_Demo02();
method_demo02.test(1,2,3,4);
}
//可变长参数函数
public void test(int... i){
if(i.length == 0){
return;
}
for(int j= 0 ;j < i.length;j++){
System.out.println(i[j]);
}
}
}
递归
递归就是:A方法调用A方法!自己调用自己。
利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所有需要的多次重复计算,大大地减少了程序代码量。递归的能力在于用有限的语句来定义对象的无限结合。
递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。如果没有投,将陷入死循环。
- 递归体:什么时候需要调用自身方法。
数组
数组的概述
数组的定义:
-
数组是相同类型数据的有序集合。
-
数组描述的是相同类型的若干个数据,按照相同的先后次序排列组合而成
-
其中,每个数称作一个数组元素,每个数组元素可以通过一个下标来访问他们。
-
数组的小标是从0开始的。
数组的声明创建
- 首先必须声明数组变量,才能在程序中使用数组。数组声明语法:
dataType[] arrayRefVar; //首选的方法
dataType arrayRefVar[]; //效果相同,但是不是首选方法
- java语言使用new操作符来创建数组:
dataType[] arrayRefVar = new dataType[arraySize];
-
数组的元素是通过索引访问的,数组的索引从0开始。
-
获取数组的长度:
arrays.length
数组的四大基本特点:
- 其长度是确定的。创建后大小不可变。
- 其元素必须是相同类型,不允许是混合类型。
- 数组可以是任意类型的数组。包括基本类型和引用类型。
- 数组变量属于引用类型,数组也可以看成对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中对象存在堆中的,因此数组无论保存原始类型还是其他类型,数组对象本身是在堆中的。
内存分析
java内存分析:
数组的三种初始化
静态初始化
int[] a = {
1,2,3};
String[] strs = {
new String(),new String()};
动态初始化
int[] a = new int[2];
a[0] = 1;
a[1] = 2;
数组的默认初始化
数组是引用类型,他的元素相当于实例变量,因此数组一经分配空间,其中的每个元素被按照实例变量同样的方式被隐式初始化。
数组边界:[0 - (array.length-1)]
数组的使用
public class ArrayDemo03 {
public static void main(String[] args) {
int[] arrays = {
1,2,