01_Java基础

Java发展史

Java平台体系结构:JavaSE/J2SE/桌面级-JavaME/J2ME/嵌入式-JavaEE/J2EE/企业级

Java主要特性:跨平台|强面向对象|分布式|解释执行|可移植|多线程

Java虚拟机(跨平台):Write Once,Run Anywhere

Java源代码>(编译器)字节码文件>JVM(Java虚拟机)>Windows|Linux|MacOs

JAVA语言环境JDK(Java Develop Kit)Java开发工具包

JRE(Java RunTime Environment)程序运行环境(虚拟机+核心类库)

jdk的目录结构:

bin       存放java开发工具的可执行文件

/bin/javac.exe 启动java编译器对源文件进行编译(javac java源文件)

/bin/java.exe  启动java虚拟机解释并执行class文件(java class文件)

db        sum公司自带一个数据库

include   存储本地方法的文件

jre        java虚拟机的文件夹

lib       核心类库文件

src       源代码文件(java语言开源)

配置环境变量:计算机>属性>高级系统设置

新建系统变量:JAVA_HOME C:\Program Files\Java\jdk1.8.0_91

新建系统变量:CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

编辑系统变量Path添加变量值:%JAVA_HOME%\bin; %JAVA_HOME%\jre\bin

测试: java –version>javac

开发java程序:[记事本/IDE]编写(源文件.java)>[编译器]编译(字节码.class)>执行

编译:将源文件(.java)转换成字节码文件(.class)的过程

反编译:将字节码文件(.class)转换为源文件(.java)的过程

反编译工具:Jd|Front End Plus

记事本开发java程序

编写:HelloWorld.java

public class HelloWorld{

    public static void main(String[] args){

        //控制台输出信息

        System.out.println(“Hello World!\n”);

}

}

编译:Javac HelloWorld.java(->HelloWorld.class)

运行:java HelloWorld

集成开发环境IDE:Eclipse/MyEclipse -- JDK文档

创建项目project>src>包>创建java类>main()中写代码>eclipse运行

Eclipse快捷键

添加/删除单行注释:ctrl+/

添加、删除多行注释的:ctrl+shift+/、ctrl+shift+\

文档注释:shift+alt+j /**+enter

删除:ctrl+d、复制:ctrl+alt+上/下、快速移动:alt+上/下、代码提示:alt+/

代码自动对齐:ctrl+shift+F、导包:shift+ctrl+o

转大写/转小写:ctrl + shift + x、ctrl + shift + y               

set/get方法|override:shift+alt+s

设置自定义快捷键:window>>preference>>keys>>getter|const

Java基础语法

标识符:由字母、数字、下划线_、美元符$组成 >> 骆驼命名法-见名知义

不能是关键字和保留字;首字母以字母下划线或美元符开头,不能以数字开头

变量命名规范:首单词小写,其他单词首字母大写

类名、接口名命名规范:单词首字母大写

包命名规范:单词小写

常量命名规范:单词大写,单词直接下划线(_)分割

关键字:abstract assert boolean break byte case catch char class continue

default do double else enum extends final finally float for if implements import instanceof int interface long native new package private protected public return short static stricfp super switch synchronized this throw throws transient try void volatile while

注释:单行注释(line comment)-多行注释(block comment)-文档注释(JavaDoc注释)

/单行注释:语句/

/*

*多行注释

*/

/** 文档注释:类、属性、方法

@author 作者

@version 版本

@param 方法参数

@return 返回值

*/

常量:在程序运行中,值不能改变的量

整型常量、浮点型常量、布尔型常量、字符常量(普通字符-转义字符-特殊字符)、

字符串常量、null常量、符号常量(final常量修饰符)

变量:在程序运行中,值可以改变的量;java程序的一个基本存储单元

    声明|赋值>>初始化

变量名(变量地址)、变量类型、变量值->先定义后使用(程序:堆区->栈区)

变量的语法:[访问修饰符] 变量类型 变量名[=初始值]

数据类型:基本数据类型(数值型|char|boolean)-引用数据类型(String|数组|类|接口)

    char类型:’单个字符’、转义字符\(对应Unicode编码)

    \b 退格键(Backspace),相当于Back Space(\u0008)

\t  制表符(Tab),相当于Tab键(\u0009)

\n 表示换行(\u000A)

\r 表示接受键盘输入,相当于回车(\u000D)

\\ 表示反斜杠(\u005C)

\’  单引号(\u0027)

\’’ 双引号(\u0022)

数据类型转换:自动类型转换(隐式类型转换)-强制类型转换

自动类型转换:byte>char/short>int>long>float>double

    int num=100;

    double b=num;// 目标类型取值范围必须大于源类型

强制类型转换:(数据类型)表达式

    double num=100.9;

    int b=(int)num;//将一个数值赋给范围更小数值范围的变量

输入输出:输入流(System.in、Scanner)-输出流(System.out、println)

//Scanner: 接收用户键盘输入的字符

//1.导入Scanner

import java.util.Scanner;//java.util.*(所有包)

//2.创建Scanner对象

Scanner input=new Scanner(System.in);

//3.获取键盘输入的数据:变量赋值

String str=input.next();//获得一个字符串

int number=input.nextInt();//nextDounle()|boolean hasNext()是否输入数据

运算符

赋值运算符:=   复合赋值运算符:+=、-=、*=、/=、%=

变量名=表达式

算数运算符:+、-、*、/、%、++、--

a++:先进行表达式运算再加1  ++a:先加1再进行表达式运算

关系运算符:==、!=、>、<、>=、<=

    一般只针对数值类数据进行判断是否相等,运算结果为boolean类型

逻辑运算符:&、|、^、!、&&短路与(左为假右不运算)、||短路或(左为真右不运算)

    &和&&、|和||区别:&&左false则false;&两侧的表达式都会参与运算

位运算符:&、|、^、~、<<左移、>>右移、>>>无符号右移

条件运算符(三目运算符/三元运算符):条件 ? 表达式1 : 表达式2

instanceof运算符:比较变量数据类型

    obj instanceof object

优先级和结合性

优先级

运算符

结合性

1

()、[]

从左到右

2

!、~、++、--

从右向左

3

*、/、%

从左向右

4

+、-

从左向右

5

<<、>>、>>>

从左向右

6

<、<=、>、>=、instanceof

从左向右

7

==、!=

从左向右

8

&

从左向右

9

^

从左向右

10

|

从左向右

11

&&

从左向右

12

||

从左向右

13

?:

从右向左

14

=、+=、-=、*=、/=、%=、&=、|=、^=、~=、<<=、>>=、>>>=

从右向左

优先顺序:算术运算符>关系运算符>逻辑运算符>条件运算符>赋值运算符

结合性从右向左:赋值运算符、三目运算符、单目运算符

流程控制顺序结构-选择结构-循环结构-跳转语句

顺序结构:从上向下依次执行每条语句

选择结构:if else/switch case  单分支结构/多分支结构

/* if控制语句 */

//格式1

if(判断条件){ //一条语句时,{}可省略

语句//条件为true所执行的代码

}

//格式2

if(判断条件){

语句1

}else{

语句2 //条件为false所执行的代码

}

//格式3

if(判断条件1){

语句1

}else if(判断条件2){

语句2

}else{//可省略

语句3

}

/* 嵌套if控制语句 */

if(判断条件1){

if(判断条件2){

语句1

}else{

语句2

}

}

/* switch语句 */

switch(表达式){//表达式可以是intshortchar、枚举类型、String(JDK1.7

以上支持)

  case 常量1:

      语句;

break;

  case 常量2:

      语句;

break;

  default:

      语句;

break;//可省略

}

循环结构:初始部分|循环条件|循环体|循环变量 while/do-while/for 多重循环(内循环/外循环)

while循环:先判断,再执行

变量初始化;

  while(循环条件){ //布尔表达式

      循环体

  }

do-while循环:先执行,再判断

变量初始化

  do{

      循环体  //至少执行一次

  }while(循环条件);

for循环:循环次数固定

for(表达式1-变量初始化;表达式2-循环条件;表达式3-修改循环变量的值){

循环体

}

多重循环:外层循环-内层循环 外层循环执行一次,内层循环执行一遍

while(循环条件1){

循环语句1

for(循环条件2){

    循环语句2

}

}

跳转语句(控制转移到循环甚至程序其他部分): break-continue-return

break语句:终止当前循环,在switch语句中作用是终止switch

continue语句:强制一个循环提前返回,让循环跳过本次循环剩余代码,然后开始下一次循环

return语句:结束当前方法的执行并退出,返回调用该方法的语法处

函数:函数定义(修饰符|返回值类型|函数名|参数)>函数调用-函数重载(同名且参数列表或参数类型不同)

修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…)

{

执行语句;

return 返回值;

}

程序调试(Debug):设置断点(程序停止的地方)>Debug模式(F5单步跳入/F6单步跳过)>观察变量>去除断点

数组:同一种类型数据的集合(容器)

内存分析:栈内存(变量)>堆內存(数组:内存中一串连续的空间)

组成:标识符、元素、下标(0-数组.length-1)、数组长度(数组.length)

定义数组:数据类型[] 数组名=new 数据类型[数组长度];

或 数据类型 数组名=new 数据类型[数组长度];

数组初始化:声明数组>分配空间>赋值

        数据类型[] 数组名={值1,值2,值3,…,值n};

数组元素分配的初始值:

        byte、short、int、long --- 0

        float、double --- 0.0

        char --- ‘\u000’

        boolean --- false

        引用数据类型 --- null

引用数组元素:数组名[下标值]

数组遍历:for循环/增强for选好

// for循环遍历数组:实现动态录入

Scanner input=new Scanner(System.in);

for(int i=0;i<score.length;i++){

score[i]=input.nextInt();

}

//增强for循环的语法:for(元素类型 变量名:要循环的数组或集合名)

for(int score:scores){

sum+=score;

}

数组异常:越界异常、空指针异常

一维数组常用操作:查找(遍历)-排序

/* 取出数组最大值 */

public static int getMax(int[] arr) {

int max = arr[0];

for(int x=1; x<arr.length; x++) {

if(arr[x]>max)

max = arr[x];

}

return max;

}

/* 直接排序 */

public static void selectSort(int[] arr) {

for(int x=0; x<arr.length-1; x++) {

for(int y=x+1; y<arr.length; y++) {

if(arr[x]>arr[y]) {

int temp = arr[x];

arr[x] = arr[y];

arr[y] = temp;

}

}

}

}

/* 冒泡排序:比较相邻两个元素,满足条件就进行位置置换

原理:内循环结束一次,最值出现在尾角标位置

*/

public static void bubbleSort(int[] arr) {

for(int x=0; x<arr.length-1; x++) {

for(int y=0; y<arr.length-x-1; y++) { //-x:让每次参与比较的元减; -1:避免角标越界

if(arr[y]>arr[y+1]) {

int temp = arr[y];

arr[y] = arr[y+1];

arr[y+1] = temp;

}

}

}

}

/* 折半查找(二分查找法):只对有序的数组有效 */

public static int halfSeach(int[] arr,int key) {

int min,mid,max;

min = 0;

max = arr.length-1;

mid = (max+min)/2;

while(arr[mid]!=key) {

if(key>arr[mid])

min = mid + 1;

else if(key<arr[mid])

max = mid - 1;

if(min>max)

return -1;

mid = (max+min)/2;

}

return mid;

}

/* 数组翻转:头角标和尾角标的元素进行位置的置换 */

public static void reverseArray(int[] arr) {

for(int start=0,end=arr.length-1; start<end; start++,end--) {

swap(arr,start,end);

}

}

//对数组的元素进行位置的置换

public static void swap(int[] arr,int a,int b) {

int temp = arr[a];

arr[a] = arr[b];

arr[b] = temp;

}

二维数组:本质存储的是一维数组

定义:数组类型[][] 数组名=new 数组类型[一维数组个数][每个一维数组中元素个数]

二维数组静态初始化:

    int [ ][ ] a=new int[ ][ ]{{},{},{}}

    int a[][]={{},{},{}}

二维数组动态初始化:

    for(int i = 0; i < a.length; i++){

        for( int j=0; j < a[i].length; j++){

    a[i][j] = ++value;

}

}

二维数组遍历:嵌套for循环

    for(int i=0;i<a.length;i++){

        for(int j=0;j<a[i].length;j++){

            System.out.print(“a[i][j]”);

        }

    }

猜你喜欢

转载自blog.csdn.net/ftmy_c/article/details/81209604