黑马程序员---- java基础知识

 java基础知识

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------


1.java概述(本章节主要整理了关于java语言的基本常识)

1.1java简介

 javaSUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级编程语言是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。是简单易学,完全面向对象,安全可靠,与平台无关的编程语言.

1.2java语言的三种技术架构

1.2.1 J2EE(Java 2 Platform Enterprise Edition)企业版

jdk5.0版本后称为JAVAEE,是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如 Servlet Jsp等,主要针对于Web应用程序开发。是传智播客就业班和黑马训练营的主要学习内容之一.

1.2.2 J2SEJava 2 Platform Standard Edition)标准版

jdk5.0版本后称为JAVASE,这是在java基础阶段主要学习的内容,也是java的基础,以后不管从事Android开发或者是物联网+云计算的开发,等是建立在JSE基础上的,因此该技术是java的最核心技术,是传智播客基础班的主要上课内容.

1.2.3 J2ME(Java 2 Platform Micro Edition)小型版

jdk5.0版本以后称为JAVAME,该技术多应用于一些电子产品的嵌入式开发,以前在手机开发上应用的也比较多,但是随着智能手机的发展,现在手机应用程序(比如Android程序)的开发已经不再使用该技术.

1.3java的运行原理及JDK JRE JVM的概念

java程序是不直接在操作系统上运行的,比如最常见的windows操作系统,表面上看起来我们写的java程序可以在上面运行,但实际上却并非如此.java的源代码文件后缀名为.java,通过编译器(javac)可以将源文件编译为字节码文件,其后缀名为.class,java虚拟机识别执行的文件就是字节码文件,java程序的运行是与平台无关的,也就说具有跨平台性.因为java是运行在java虚拟机(JVM)中的,因此只要JVM可以运行的地方那么我们编写的java程序(指字节码文件而不是源代码)也可以运行,这就是java跨平台的机制.
 
图片

JVMjava virtual machine的简称,在上面已经提到过,就是java虚拟机,是执行java程序的机器,JVM运行在操作系统上,java程序运行在JVM.JVM的本质也是一个应用程序,对于不同的平台需要不同版本的JVM,JVM主要是由C语言编写而成.因此JVM是不具跨平台性的.

JREjava runtime environment的简称,java运行环境,JRE包含了JVMjava的核心类库.我们要运行一个java程序,那么计算机中必须安装有JRE.Windows2000之前的版本,微软在操作系统里内置了JRE,但是后来SUN公司以侵犯版权为由投诉了微软公司,因此微软之后的操作系统里就不再内置JRE.因此如果我们要想运行一个java程序必须先安装JRE,暗转JRE是一件比较繁琐的事情,因为还要配置环境变量等操作,对于一个专业人士可能比较简单,但是对于广大电脑用户就有点困难,因此现在编写的java 程序想在任何windos上运行还是很麻烦的.

JDKjava develop kit的简称,是专为java程序开发人员提供的一个开发工具包,里面不仅包括JRE还包括编译器和打包工具等.作为一个java程序学习者,只要我们安装了JDK,那么JRE,JVM就不需要单独安装了.目前(201212)最新的JDK版本是ORACLE公司在2011728日发布的jdk7.

1.4JDK的下载、安装以及环境变量的配置

我们可以在ORACLE的官方网站(www.oracle.com,或者www.sun.com)下载最新的JDK.下载时一定要注意JDK的适用平台Linux/Unix/windows/Mac等不同平台,每个平台又有不同的版本.

下载后的安装以windows xp为例,双击安装包程序就可以启动安装程序,装的过程中安装程序默认的安装路径为C:\\program files\\java,传智的老师(石松老师)说默认的路径太深,因此不建议使用默认路径,还有的老师根据自己的经验来说因为默认路径中的\\program files\\有空格,在以后的开发中可能会有一些异常现象,因此最好自己定义一个路径比如直接放在C:\\java下面.同时路径名不能有汉字,原因同上.

安装好JDK以后,需要配置环境变量.配置环境变量其实就是在执行启动虚拟机命令时,让操作系统去根据用户配置的路径寻找虚拟机.


右击我的电脑->属性->高级->环境变量,再选中Path条目,点击编辑.复制自己jdk的安装路径,精确到bin目录,然后将自己的路径粘贴到变量值编辑框中并家上英文分号
;,注意,不要覆盖或者编辑其他路径.

上面是最常见的配置环境变量的方式,还有一种相对路径配置方法就不介绍了.关于classpath临时环境变量的配置,是在dos命令行中通过set classpath=路径的方式配置,,该配置主要是让jvm去找到要运行的字节码文件,因此上面的路径要设为.class文件所在目录,如果上面路径加上分号,那么java命令执行的时候,会先去指定的路径下查找.class文件,如果找不到则在当前目录下查找.由于classpath环境变量是临时起作用的,现在一般很少使用.

配置好环境变量以后,我们要测试一下,是否成功.打开运行,输入cmd打开dos命令行窗口,输入java,然后回车,如果出现一系列关于java的使用说明的文字则说明配置成功了.
图片 
图片 

2.常见DOS命令

在学习java的初期为了更好的对代码的记忆以及对java运行机制的理解,一般不使用高级开发工具,用记事本或者Editplus等简单工具即可.因此必须要使用dos界面操作自己的java程序.常见的dos命令总结如下:

cd :进入一个目录

cd..:返回上一级目录

cd\:返回跟目录

dir:列出当前目录下的所有文件

start:打开另一个dos窗口,该窗口保留了当前窗口的配置环境

exit:退出dos命令窗口

md:创建一个目录

rd:删除一个目录,但是要保证该目录为空

del:删除文件

edit:在窗口中打开一个记事本

cls:清空当前窗口内容

盘符加冒号(比如D:):进入该盘符的根目录

3.java关键字

关键字就是在java语言中被赋予了特殊含义的单词.

java的关键字在书写上都是以小写的形式存在.关键字有很多,根据目的不同可分为以下几类:

3.1用于定义数据类型

byte 字节型char字符型 short短整型 int整型 float浮点型 long长整型 double 双浮点型 boolean 布尔型 void空类型

3.2用于数据类型值

true false假 null(该类型与上面的void比较相似,但是用法不同).

3.3用于定义流程控制

if else switch case for while do break continue return default

3.4用于修饰访问权限

private public protected

3.5用于定义类,函数,变量修饰符的关键字

abstract final static synchronized

3.6用于定义类与类(接口)之间关系的关键字

extends implements

3.7用于定义建立实例及引用实例,判断实例的关键字

new this super instanceof

3.8用于异常处理的关键字

try catch throws throw finally

3.9用于包的关键字

package import

3.10其他修饰符关键字

native strictfp transient volatile assert

4.标识

标识符是在程序中用户自己定义的一些名称.比如int a=0;那么a就是标示符,代表一个整型.标识符的命名是有严格规定的:1,标识符不能以数字开头2,不能用关键字

C语言中,标识符可以是26个英文字母/数字/$_,java中对汉字等多种符号也进行了支持,也就是说我们完全可以用汉字去当做一个变量的名字或者类名.比如int 整型=1;这个也是允许的.但是标识符的命名一定要见名知意的原则,而且不建议使用汉字符号.java语言中,字母大小写是严格区分的.

4.1标识符的命名规则

下面总结的是java中名称的命名规则,虽然不具强制性,但是为了增加程序的可阅读性.因此在编写程序的过程一定要遵循命名规则.

1. 包名:多单词组成时所有字母都小写。

2. 类名接口名:多单词组成时,所有单词的首字母大写。

3. 变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。

4. 常量名:所有字母都大写。多单词时每个单词用下划线连接。

5.运算符

1. 算术运算符

2. 赋值运算符

3. 比较运算符

4. 逻辑运算符

5. 位运算符

6. 三元运算符图片

5.1算术运算符(如下图)

对于有负数参与的取模:计算时,等当做整数进行,将结果的正负号和左侧参与运算数字的正负号一致即可.示例如图:

图片

 

5.2赋值运算符

= , +=, -=, *=, /=, %=

代码示例如下:

class YunSuanFuDemo //演示赋值运算法

{

public static void main(String[] args) 

{

int a=10;//0的值赋给a

System.out.println(a);

a+=1;//等效于a=a+1;

System.out.println(a);

a-=1;//等效于a=a-1;

System.out.println(a);

a*=10;//等效于a=a*10

System.out.println(a);

a/=10;//等效于a=a/10;

System.out.println(a);

a%=5;//等效于a=a%5;

System.out.println(a);

}

}

需要注意的问题:

byte b=1;

b=b+1;//编译失败,因为bbyte型的,而数字1java默认为int型的,int型在内存空间上大于byte型的,因此编译失败.如果想编译成果,那么我们需要强制类型转换b=(byte)(b+1);

b++;//编译成功

下面代码示例了数据类型的自动提升.

int a=1;

byte b=1;

a=a+b;//编译成功,因为byte是小类型,低于int型的,因此数据和整型计算时类型自动提升为int型的.,因此编译成功.

图片

5.3比较运算符

示例代码如下:

class BiJiaoFunDemo //演示//比较运算符

{

public static void main(String[] args) 

{

int a=1,b=2,c=3;

System.out.println(a==b);//运行结果 false

System.out.println(a>b);//运行结果 false

System.out.println(a<b);//运行结果 true

System.out.println(a!=b);//运行结果 true

System.out.println(a>=b);//运行结果 false

System.out.println(a<=b);//运行结果 true

System.out.println("hello java" instanceof String);//运行结果 true

}

}图片

5.4逻辑运算符

需要注意的是 &&&的区别,|||的区别.示例代码如下:

class Demo//演示 &&&的区别,|||的区别

{

public static void main(String[] args) 

{

int a=1,b=1,c=1,d=1;

if(a<10|(a++)>5)

{}

System.out.println("a="+a);//运算结果 2

if(b<10||(b++)>5)

{}

System.out.println("b="+b);//运算结果 1

if(c>10&(c++)<15)

{}

System.out.println("c="+c);//运算结果 2

if(d>10&&(d++)<15)

{}

System.out.println("d="+d);//运算结果 1

}

}图片

5.5位运算符

位运算演示如下:

class WeiYunSuanDemo //演示位运算

{

public static void main(String[] args) 

{

System.out.println("20>>2="+(20>>2));//运算结果 5

System.out.println("2<<2="+(2<<2));//运算结果 8

System.out.println("-2>>>3= "+(-2>>>3));//运算结果 536870911

System.out.println("-2>>3= "+(-2>>3));//运算结果 -1

System.out.println("2|3="+(2|3));//运算结果 3

System.out.println("2&3="+(2&3));//运算结果 2

System.out.println("2^3="+(2^3));//运算结果 1

System.out.println("~3="+(~3));//运算结果 -4

}

}

5.6三元运算符

格式

•   (条件表达式)?表达式1:表达式2

•   如果条件为true,运算后的结果是表达式1

•   如果条件为false,运算后的结果是表达式2

示例代码如下:

class SanYuanDemo//演示三元运算符 

{

public static void main(String[] args) 

{

int a=1,b=2;

int d=(a>b)?10:20;

System.out.println(d);//运算结果 20

d=(a<b)?10:20;

System.out.println(d);//运算结果 10

}

}

6.注释

用于注解说明解释程序的文字就是注释。注释提高了代码的阅读性,可分为单行注释,多行注释和文档注释.

单行注释

•  格式: //注释文字

多行注释

•  格式: /*  注释文字  */

文档注释

•  格式:/** 注释文字 */

对于单行和多行注释,被注释的文字,不会被JVM

java虚拟机)解释执行。

对于文档注释,是java特有的注释,其中注释内容可

以被JDK提供的工具 javadoc 所解析,生成一套以网

页文件形式体现的该程序的说明文档。

7.常量与变量

常量表示不能改变的数值。

Java中常量的分类:

1,整数常量。所有整数

2,小数常量。所有小数

3,布尔型常量。较为特有,只有两个数值。true false

4,字符常量。将一个数字字母或者符号用单引号( ' ' )标识。

5,字符串常量。将一个或者多个字符用双引号标识。

6null常量。只有一个数值就是:null.

变量是计算机内存中的一个存储区域,该区域有自己的名称和类型,并且可以在同一类型范围内不断变化.比如我们定义int a=1;那么a就是一个变量,数字1是一个常量.

8.进制

现实生活的中有很多进制,比如记录小时的12小时制,分钟/秒的60进制,记录星期的7进制.

在计算机中所有数据都是以二进制的形式存储的,java中一个整型数据可以用二进制/八进制/十进制/十六进制来表示.

示例代码如下:

class JInZhiDemo//演示一个整型的不同进制表现形式 

{

public static void main(String[] args) 

{

int a=60;//定义一个十进制数a=30.

System.out.println(Integer.toBinaryString(a));//运算结果 111100

System.out.println(Integer.toOctalString(a));//运算结果 74

System.out.println(Integer.toHexString(a));//运算结果 3c

int b=025;//定义一个八进制的书b=015;以零开头

System.out.println(b);//运算结果 21

System.out.println(Integer.toHexString(b));//运算结果 15

System.out.println(Integer.toBinaryString(b));//运算结果 10101

int c=0x16;//定义一个十六进制数c=0x16,数字0和字母x开头

System.out.println(c);//运行结果 22

System.out.println(Integer.toBinaryString(c));//运行结果 10110

System.out.println(Integer.toOctalString(c));//运行结果 26

System.out.println(c);//运算结果 22

int d=0b10101110;//定义一个二进制数,数字0和字母b开头

System.out.println(d);//运行结果 174

System.out.println(Integer.toOctalString(d));//运行结果 256

System.out.println(Integer.toHexString(d));//运算结果 ae

}

}

8.1进制之间的转换

不同进制之间的数据可以相互转化,下面代码示例了将十进制数据转化为二进制/八进制/十六进制:

class JinZhiTransDemo//演示不同进制之间的转化 

{

public static void main(String[] args) 

{

jinZhiTrans(60,8);//608进制

jinZhiTrans(60,16);//6016进制

jinZhiTrans(60,2);//602进制

}

//该函数接受两个整型参数,第一个参数是要转换为其他进制的十进制整数,第二个参数是基数

public static void jinZhiTrans(int num,int radix)

{

 int temp=num;

char[] chs=new char[]{'0','1','2','3','4','5','6','7',

'8','9','A','B','C','D','E','F'};//建立一个对应的字母表

StringBuilder sb=new StringBuilder();

while(num>0)

{

sb.insert(0,chs[num%radix]);

num>>=(int)(Math.log(radix)/Math.log(2));//数据进行移位运算

}

System.out.println(temp+""+radix+"进制形式为: "+sb.toString());

}

}

EditPlus上运行结果:

---------- 执行 ----------

608进制形式为: 74

6016进制形式为: 3C

602进制形式为: 111100

输出完毕 (耗时 ) - 正常终止.

9.控制语句

java中的控制语句有:判断语句/循环语句/选择语句.

9.1判断语句

if语句的三种格式:

1.  if(条件表达式)     

{

执行语句;

}

2.if(条件表达式)

{

执行语句;

}

else

{

执行语句;

}

3.if(条件表达式)

{

执行语句;

}

else   if   (条件表达式)

{

执行语句;

}

……

else

{

执行语句;

}

示例代码如下:

class IfelseDemo//判断语句演示 

{

public static void main(String[] args) //给定一个月份,判断该月属于的季节

{

int a=9;

if(a>12||a<0)

{

sop("输入的数字非法!");

}

else if(a>=3&&a<=5)

{

sop("春天.");

}

else if(a>=6&&a<=8)

{

sop("夏天");

}

else if(a>=9&&a<=11)

{

sop("秋天");

}

else 

{

sop("冬天");

}

}

static void sop(Object obj)

{

System.out.println(obj);

}

}

EditPlus上运行结果:

---------- 执行 ----------

秋天

输出完毕 (耗时 ) - 正常终止.

9.2循环语句

有三种循环结构:

for(条件){语句}

while(条件){语句}

do{语句}while(条件);

演示代码如下:

class XunHuanDemo//演示循环语句 

{

public static void main(String[] args) 

{

for(int i=0;i<10;i++)

{

System.out.print(i+" ");

}

System.out.println();

int k=0;

while(k<10)

{

System.out.print(k+" ");

k++;

}

System.out.println();

k=0;

do

{

System.out.print(k+" ");

k++;

}

while (k<10);

}

}

EditPlus上运行结果如下:

---------- 执行 ----------

0 1 2 3 4 5 6 7 8 9 

0 1 2 3 4 5 6 7 8 9 

0 1 2 3 4 5 6 7 8 9 

输出完毕 (耗时 ) - 正常终止

9.3选择语句

switch(变量)

case 数值:语句;

case 数值:语句;

.........

default:语句;

jdk7.0之前switch里面只支持四种数据类型:byte short int char,jdk7.0发布以后增加支持了String类型.

代码演示如下:

class SwitchDemo //演示switch语句的使用

{

public static void main(String[] args) 

{

String str="abc";

switch(str)//String 类型演示

{

case "a":System.out.println("awesrfg");break;

case "abc":System.out.println("asdf");

default :System.out.println("default");

}

int a=0;

switch(a)//整型类型演示

{

case 1:System.out.println(1);break;

case 2:System.out.println(2);break;

default:System.out.println("default");

}

byte b=1;

switch(b) //Byte型类型演示

{

case 1:System.out.println(1);break;

case 2:System.out.println(2);break;

default:System.out.println("default");

}

char c='c';

switch(c)//字符类型演示

{

case 'a':System.out.println("a");break;

case 'b':System.out.println("b");break;

case 'c':System.out.println("c");break;

default :System.out.println("default");

}

short s=4;

switch(s)//short 类型演示

{

case 3:System.out.println(3);break;

case 4:System.out.println(4);break;

default:System.out.println("default");

}

long l=1l;

switch((int)l)

{

case (int)1l:System.out.println(1l);break;

case (int)2l:System.out.println(2l);break;

default:System.out.println("default");

}

}

}

EditPlus上运行结果如下:

---------- 执行 ----------

asdf

default

default

1

c

4

1

输出完毕 (耗时 ) - 正常终止

10.类的概念

java中的最小程序单位是类(class)具有相同或相似性质的一组对象的抽象就是类,类是对一类事物的描述,是抽象的/概念上的定义.类用;来描述一系列对象,类概述每个对象应包括的数据,类概述每个对象的行为特征.因此可以把类理解成某种概念/定义,它规定了某类对象所共同具有的数据和行为特征.比如我们定义了一个人类,那么人类具有的相同属性有 名字/岁数/性别等,人具有的方法有 吃饭/睡觉/工作等.每一个人都是人类的一个实例.

11.函数

函数也叫方法.

函数的格式:

图片

11.1函数的重载

//OverLoad

在用一个类中,允许有多个同名函数,只要他们的参数列表不同或者参数类型不同即可.

重载与返回值无关,只看参数列表.

子类和父类之间也可以重载.,因为子类会获得父类方法,如果子类定义了一个与父类方法名相同的方法,但是参数列表不同,就会形成父类方法和子类方法的重载.

函数重载演示代码如下:

class OverLoadDemo//演示函数的重载 

{

public static void main(String[] args) 

{

sop(add(1,2));

sop(add(1.2,3.2));

sop(add(1,2,3,3,4,54));

sop(add(1,2,3));

}

public static int add(int a,int b)//函数1

{

sop("函数1被调用.");

return a+b;

}

public static int add(int a,int b,int c)//函数2

{

sop("函数2被调用.");

return a+b+c;

}

public static int add(int...a)//函数3

{

sop("函数3被调用.");

int temp=0;

for(int c:a)

{

temp+=c;

}

return temp;

}

static double add(double a,double b)//函数4

{

sop("函数4被调用.");

return a+b;

}

static void sop(Object obj)

{

System.out.println(obj);

}

}

运行结果:

---------- 执行 ----------

函数1被调用.

3

函数4被调用.

4.4

函数3被调用.

67

函数2被调用.

6

Output completed (0 sec consumed) - Normal Termination

12.程序入门体验

麻雀虽小五脏俱全,一个简单的java程序如下:

class Print99//打印99乘法表 

{

public static void main(String[] args) 

{

for(int i=1;i<10;i++)

{

for(int k=1;k<=i;k++)

{

sop(k+"*"+i+"="+i*k+"\t");

}

sop();

}

}

static void sop(Object obj)

{

System.out.print(obj);

}

static void sop()

{

System.out.println();

}

}

运行结果如下:

---------- 执行 ----------

1*1=1

1*2=22*2=4

1*3=32*3=63*3=9

1*4=42*4=83*4=124*4=16

1*5=52*5=103*5=154*5=205*5=25

1*6=62*6=123*6=184*6=245*6=306*6=36

1*7=72*7=143*7=214*7=285*7=356*7=427*7=49

1*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=64

1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81

输出完毕 (耗时 ) - 正常终止

13.常见排序方法

13.1冒泡排序

class MaoPaoDemo//演示冒泡排序 

{

public static void main(String[] args) 

{

int[] arry=new int[]{23,4,2,56,74,28,58,21};

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

{

for(int k=0;k<arry.length-1-i;k++)

{

if(arry[k]>=arry[k+1])

{

int temp=arry[k+1];

arry[k+1]=arry[k];

arry[k]=temp;

}

}

}

sop(arry);

}

public static void sop(int[] arry)

{

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

{

System.out.println(arry[i]);

}

}

}

---------- 执行 ----------

2

4

21

23

28

56

58

74

输出完毕 (耗时 ) - 正常终止

关于冒泡排序和选择排序,自己画了一幅图来说明问题.

图片

13.2选择排序

class SelectDemo//选择排序 

{

public static void main(String[] args) 

{

int[] arry=new int[]{23,4,2,56,74,23,56,21};

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

{

for(int k=i+1;k<arry.length;k++)

{

if(arry[i]>=arry[k])

{

int temp=arry[i];

arry[i]=arry[k];

arry[k]=temp;

}

}

}

sop(arry);

}

public static void sop(int[] arry)

{

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

{

System.out.println(arry[i]);

}

}

}

---------- 执行 ----------

2

4

21

23

23

56

56

74

输出完毕 (耗时 ) - 正常终止

13.3折半查找

class ZheBanDemo//折半查找

{

public static void main(String[] args) 

{

int target=6;//要获取6的脚标位置

int[] arry=new int[]{1,2,3,4,7,8,9,19};

int mid,min,max;

min=0;

max=arry.length-1;

mid=arry[(min+max)/2];

while(min<=max)

{

System.out.println(min+"  "+max);

if(target>arry[mid])

{

min=mid+1;

mid=(min+max)/2;

}

if(target<arry[mid])

{

max=mid-1;

mid=(min+max)/2;

}

if(target==arry[mid])

{

System.out.println("发现目标:"+mid);

break;

}

}

System.out.println("目标应该处于的位置:"+mid);

}

}

EditPlus上运行结果

---------- 执行 ----------

0  7

0  3

2  3

3  3

目标应该处于的位置:3

输出完毕 (耗时 ) - 正常终止




  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值