Stage 1 - Course 1 - JAVA基础知识

CHAPTER 1 初识JAVA

  一、课前准备:配置环境变量      

1、添加环境变量的位置

计算机->计算机->右击->属性->高级系统设置->环境变量->系统环境变量

 2、配置JAVA环境变量

1)创建一个环境变量

变量名:JAVA_HOME

值:jdk安装根目录 D:\TOOLS\Java\jdk1.7.0_67

2)在Path环境变量下添加:%JAVA_HOME%\bin;(最好放在最前面,%是替换符 ;是路径开始或结束)

3)分别测试一下命令: java;  javac;  java -version

小知识::环境变量配置的作用(http://jingyan.baidu.com/article/59a015e3ab9d0cf795886579.html)

a)配置环境变量-1:新建JAVA_HOME。

作用:1)为了方便引用,比如,你JDK安装在C:\Program Files\Java\jdk1.6.0目录里,则设置JAVA_HOME为该目录路径, 那么以后你要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串;

2)归一原则, 当你JDK路径被迫改变的时候, 你仅需更改JAVA_HOME的变量值即可, 否则,你就要更改任何用绝对路径引用JDK目录的文档, 要是万一你没有改全, 某个程序找不到JDK, 后果是可想而知的----系统崩溃!

3)第三方软件会引用约定好的JAVA_HOME变量, 不然, 你将不能正常使用该软件, 以后用JAVA久了就会知道, 要是某个软件不能正常使用, 不妨想想是不是这个问题。

b)配置环境变量-2:新建CLASSPATH。(可省略)

变量名为:CLASSPATH

变量值为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(要加.表示当前路径)

作用:这个变量设置的目的是为了程序能找到相应的".class"文件,

不妨举个例子: 你编译一个JAVA程序---A.java, 会得到一个A.class的类文件,你在当前目录下执行java A, 将会得到相应的结果(前提是你已经设置CLASSPATH为"."). 现在, 你把A.class移到别的目录下(例如:"e:\"), 执行java A, 将会有NoClassDefFindError的异常,原因就是找不到.class文件, 现在你把CLASSPATH增加为:".;e:\"再运行java A, 看看会有什么结果),一切正常, java命令通过CLASSPATH找到了.class文件!

c)配置环境变量-3:补充Path。(注意是追加,而不是替换!)

作用:道理很简单, 你想在任何时候都使用%JAVA_HOME%\bin\java 等来执行java命令吗, 当然不会, 于是, 你可以选择把 %JAVA_HOME%\bin添加到PATH路径下, 这样, 我们在任何路径下就可以仅用java来执行命令了.(当你在命令提示符窗口输入你个代码时,操作系统会在当前目录和PATH变量目录里查找相应的应用程序, 并且执行.)

配置环境变量时,用户变量与系统变量的差别:系统环境变量,对所有用户起作用;而用户环境变量只对当前用户起作用。

DOS窗口几个常用命令:

打开窗口windows+R,输入CMD回车

cd 进入  cd子目录

cd ..//回到上一级

dir 列出当前路径的所有子文件

二、第一个JAVA程序  

1、源代码

public class HelloWorld{

public static void main(String[] args){

System.out.println("Hello!");

}

}

Notes:

  1)类名与文件名完全一致,类名首字母大写

2)main:程序的入口,程序由此执行

3)System.out.println("输出的内容"); 控制台输出内容,固定格式

转义符:\n 将光标移到下一行

\t 将光标移到下一个水平制表位置

2、运行程序

开发JAVA程序三步走:编写源程序->编译源程序->运行字节码文件

使用javac编译 HelloWorld.java文件  javac HelloWorld.java

使用java运行 HelloWorld.class文件(字节码文件/类文件)  java HelloWorld(注意不带.class)

PS: 1)JAVA的可移植性(Write once,Run Anywhere)

  2)几个概念:

JDK(java development kit)

JRE(java runtime environment)

JVM(java virtual machine)

3)java的注释

文档注释 /**   */

单行注释 //

多行注释 /*    */

CHAPTER 2 数据类型和运算符

一、标识符和关键字

关键字:java语言赋予特殊含义的单词,

特点:高级开发工具具有颜色,全部小写

标识符:给变量和方法等起名字的

命名规则:  1)组成由字母(大小写)、数字、下划线、$

2)不能以数字开头

3)不能使用关键字

  4)驼峰命名法,见名知意

二、常量与变量

1、常量:不可改变的量        10,PI,“abc”,true

   常量定义使用关键字final, final double PI = 3.14

note: 常量名通常大写;不同字符间使用下划线;只能被赋值一次,通常定义时即对其初始化

2、变量:值可以变化的量,可以存储相对应的数据 int num = 10;

使用变量的步骤:1.申明变量 (数据类型 变量名 Ex. int money;)

    2.赋值,可与1合并 (变量名=数值 money = 1000;)

   3.使用变量

三、数据类型(参考imooc笔记)

1、java中的基本数据类型

整型

byte     1字节8位    -128~127

short    2字节16位

int        4字节32位    范围:2^31-1

long     8字节64位

浮点型

float        4字节32位浮点数

double    8字节64位浮点数

  char        2字节

   boolean     两个值:true/false

2、String:不是基本数据类型,它是引用数据类型,是JAVA提供的一个类

(note: java中默认使用int表示整型,使用double表示浮点型

java中的基本数据类型共有8种,String不是

注意一下代码的问题:

byte b1 = 3;

byte b2 = 4;

byte b = b1+b2;

四、Scanner的使用、自动类型转换、强制类型转换

1、使用Scanner的步骤:

1)导入Scanner类-> inport java.util.Scanner

2)创建Scanner对象->Scanner input = new Sacnner(System.in);

3)获得键盘输入的数据->int num = input.nextInt();

int num = input.nextInt();//阻塞,next()只能获取有效值,可用nextLine()获取无效值(空格/换行后面的值)

Scanner的常用方法:String next(); int nextInt(); double nextDouble(); boolean hasNext 判断是否有输入数据。如果有输入数据则返回true;否则,返回false

2、自动类型转换、强制类型转换

自动类型转换的条件:两种类型要兼容;目标类型要大于源类型

* byte,short,char-> int ->long ->float ->double

* 浮点型与整型的存储方式不一样,float的范围比long广,所以long(8字节)可以转为int(4字节)

记住:

byte b1 =3;

byte b2 = 4;

byte b= b1+b2;//类型提升,报错

byte b = 3+4;//常量在编译时已经计算,不会报错

强制类型转换:语法 -> 目标数据类型 变量名 = (目标数据类型)源数据

五、运算符

1、赋值运算符 =

两个整型变量值的交换方式的几种方式

A.引入中间变量

int a = 3;

int b = 4;

int temp = a;

a = b;

b = temp;

B.求和求差

int a = 3;

int b = 4;

a = a+b;//a=7,b=4(前提是a+b不能溢出)

b = a-b;//a=7,b=3

a = a-b;

C.一个表达式实现

int a = 3;

int b = 4;

b = a+b-(a=b);

D.异或^

仅当两条件中一个为真,另一个为假时,结果为真。真^假=真 假^真=真 真^真=假 假^假=假

但java的异或运算都是以二进制为基础进行的运算

a = a^b;

b = a^b;

a = a^b;

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

2、算术运算符 + - * / % ++ --

num++和++num的区别:num++先取num的值赋值,后自增;  ++num 先自增,后取num的值赋值

3、关系运算符 > == < >= <= !=    结果是boolean类型,

>、<、>=、<= 运算符的优先级别高于==、!=

>、<、>=、<=运算符只支持数值类型的数据比较

4、逻辑运算符 && || !

如果第一个操作数已经能确定表达式的值,第二个操作数就不再计算了,使用|可以指明即使能判断结果仍然执行后面的语句;优先级别! > && > ||

5、三目运算符/条件运算符 关系表达式?值1:值2

如果关系表达式为true,结果是值1;如果关系表达式为false,结果是值2;值1,2也可以是字符串

求两个数的最大值:int max = num1>num2?num1:num2;

6、运算符的优先级

最低要求:优先级最高(括号)、低(赋值=)的运算符

算术运算符 > 关系运算符 > 逻辑运算符

CHAPTER 3 流程控制

一、if分支结构

1、if选择结构

2、if...else...

3、多重if语句

4、if嵌套

字符串的比较使用equals( )   Ex. sex.equals("男"); 比较基本数据类型是否相等用“==”,其余都用equals

产生随机数0-9的方法:int random = (int)(Math.random( )*10)

二、switch选择结构语法

switch结构->解决等值判断问题 int byte short char 枚举类型(JDK1.5) String(JDK1.7)

switch, case, break, default

每个case后不要忘记写break; default通常放在末尾(需要加break;),也可以省略

switch 与 if的区别:switch只能处理等值条件判断的情况; if特别适合某个变量处于某个连续区间时的情况

switch(today){

case 1:

case 2:

case 3:

case 4:

case 5:

System.out.println("上课写代码");

break;

case 6:

System.out.println("自习,复习,提高");

break;

case 7:

System.out.println("休整");

break;

default:

System.out.println("输入有误");

}

三、循环结构语句

无论哪一种循环结构,都有4个必不可少的部分:初始部分、循环条件、循环体、迭代部分

循环语句注意分析 循环条件和循环体

1、使用while循环

while(循环条件){

循环操作

}

先判断,再执行

public class Demo3 {

public static void main(String[] args) {

System.out.println("MyShopping管理系统 > 购物结算");

Scanner input = new Scanner(System.in);

String choose = "";//用来存储用户的选择

while (!choose.equals("n")) {

System.out.println("*******************");

System.out.println("请选择购买的商品编号:");

System.out.println("1.T 恤\t2.网球鞋\t3.网球拍");

System.out.println("*******************");

System.out.println("请输入商品编号:");

int num = input.nextInt();//用来接收商品编号

switch (num) {

case 1:

System.out.println("T 恤\t¥245.0");

break;

case 2:

System.out.println("网球鞋\t¥285.0");

break;

case 3:

System.out.println("网球拍\t¥300.0");

break;

default:

System.out.println("输入商品号有误");

}

System.out.println("是否继续(y/n):");

choose = input.next();

}

System.out.println("程序结束");

}

2、使用do...while循环

do{

循环操作

}  while(循环条件)

先执行,再判断(任何情况下都至少执行一次)

3、使用for循环

System.out.println("根据这个值可以输出以下加法表:");

for(int i=0,j=num;i<=num;i++){

System.out.println(i+"+"+j+"="+num);

j--;

}

四、循环语句嵌套

1、打印矩形

int hang = 5;

int lie = 5;

//行数

for (int j = 0; j < hang; j++) {

//每行打印的*的个数

for (int i = 0; i < lie; i++) {

System.out.print("*");

}

System.out.println();//换行

}

2、打印一个三角形

int hang = 7;

int lie = 4;

//n        hang-n

//n        2*n+1

//外层控制行数

for(int i=0;i<hang;i++){

//内层控制""的个数

for(int j=0;j<hang-i;j++){

System.out.print(" ");

}

//内层控制*的个数

for(int j=0;j<(2*i+1);j++){

System.out.print("*");

}

System.out.println();//换行

}

3、打印一个菱形

for(int j=0;j<4;j++){

for(int i=0;i<4-j;i++){

System.out.print(" ");

}

for(int i=0;i<4;i++){

System.out.print("*");

}

4、打印99乘法表

//控制行数

for(int i=1;i<=9;i++){

//控制列的个数

for(int j=1;j<=i;j++){

//根据行列i,j 打印算数表达式

System.out.print(j+"*"+i+"="+i*j+"\t");

}

System.out.println();

}

// + 对于字符串来说,+代表拼接

五、跳转语句控制程序流程

break语句,continue语句,return

使用标志位和break实现跳出:

Scanner input = new Scanner(System.in);

System.out.println("请输入学生姓名:");

String name = input.next();

double sum = 0;

boolean flag = true;// 定义一个标志位

for (int i = 1; i <= 5; i++) {

System.out.print("请输入第" + i + "门成绩");

double score = input.nextDouble();// 存储成绩

if (score < 0) {

flag = false;// 输入为负值,flag赋值为false

break;

}

sum += score;

}

if (flag) {

System.out.println(sum / 5);

} else {

System.out.println("输入的成绩为负数");

}

}

使用continue统计成绩大于80的分学生的人数

Scanner input = new Scanner(System.in);

System.out.println("请输入班级总人数:");

int stuNo = input.nextInt();//总人数

int num = 0;//存储大于80分学生的人数

for(int i=0;i<stuNo;i++){

System.out.print("请输入第"+i+"位学生的成绩:");

double score = input.nextDouble();

if(score<=80){

continue;//跳出本次循环,进入下一次循环

}else{

num++;

}

}

System.out.println("80分以上的学生人数是:"+num);

System.out.println("80分以上的学生所占的比例是:"+num*1.0/stuNo*100+"%");

/*

* *1.0

* 强制double

* 定义为double变量

*/

break:跳出整个循环;常用于switch结构和循环结构中

continue:跳出本次循环,进行下一次循环;只能用在循环中

多重循环中,break和continue都是终止离他最近的那一个循环

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

六、程序调试

设置断点->单步运行->观察变量

Debug

step over

CHAPTER 4

一、数组的定义与赋值

1、数组的定义

声明一个变量就是在内存空间划出一块合适的空间

声明一个数组就是在内存空间划出一串连续的空间

a)int[ ] arr ={12,23,43,23,12};//直接申明数组,静态申明方式

b)//动态申明方式

int[] array = new int[3];

  array[0] = 12;

array[1] = 13;

array[2] = 15;

c)int[] a = new int[]{12,23,45,43};

2、java中数组特点:长度固定,属性数据类型相同,下标从0开始

arr.length获取数组长度

3、循环赋值

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

System.out.print("请输入第"+(i+1)+"笔购物金额:");

arr[i]=input.nextDouble();

}

遍历数组

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

System.out.println("arr的第"+(i+1)+"个元素是:"+arr[i]);

}

数组元素之和

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

sum +=arr[i];

}

4、堆内存与栈内存的特点

堆:会做默认的初始化

整数          0

浮点型      0.0

String       null

字符          空字符

栈:不会做默认的初始化

要求:使用变量前要初始化

new出来的都在堆中(数组、Scanner)

//数组输入一个数,判断数组中是否有这个数

Scanner input = new Scanner(System.in);

System.out.println("请输入一个整数:");

int num = input.nextInt();

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

if(num==arr[i]){

System.out.println("包含"+num);

break;//结束循环

}

}

二、数组排序

1、数组注意事项:数组下标从0开始;数组长度->数组名.length;数组元素遍历->for/foreach

2、数组常用操作:1)获取最大值、最小值

           int max = arr[0];

int min = arr[0];

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

if (arr[i] > max) {

max = arr[i];

}

if(arr[i]<min){

min = arr[i];

}

}

System.out.println("最大值为"+max);

System.out.println("最小值为"+min);

}

2)数字排序

冒泡排序

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

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

int temp = 0;

if(arr[j]<arr[j+1]){//降序     //升序 arr[j]>arr[j+1];

temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

共需要(N-1)+(N-2)+...+2+1=N(N-1)/2????

3)数组插入元素(原数组已降序排列)

           int num = 86;

int[] arr = {99,98,95,87,76};

//1.确定插入的下标

int index = -1;//若为-1,则添加到最后一位

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

if(num>arr[i]){

index = i;//存储下标,并结束循环

break;

}

}

if(index==-1){

index = arr.length;

}

System.out.println(index);

//2.创建数组,把老数组的值拷贝到新数组中

//{99,98,95,87,76,0};

int[] newArr = new int[arr.length+1];

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

newArr[i]=arr[i];

}

//3.index往后,所有元素往后挪一位

for(int i=newArr.length-1;i>index;i--){

newArr[i]=newArr[i-1];

}

//4.插入值

newArr[index] = num;

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

System.out.print(newArr[i]+"\t");

}

4)逆序

//逆序打印

//方法1

for(int i=0;i<arr.length/2;i++){

int temp = arr[i];

arr[i] = arr[arr.length-i-1];

arr[arr.length-i-1] = temp;

}

//方法2

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

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

//遍历打印

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

System.out.print(arr[i]+"\t");

}

3、使用Arrays类操作数组,使用java.util.Arrays类

1)Arrays.sort(数组名) -> 对数组进行升序排列:

int[] arr = {90,9,45,65,78};

Arrays.sort(arr);//排序

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

System.out.print(arr[i]+"\t");

}

2)booleanequals(array1,array2) -> 比较array1和array2两个数组是否相等

           int[] arr1 = {1,2,3};

int[] arr2 = {1,2,3};

boolean b= Arrays.equals(arr1, arr2);

System.out.println(b);

3)StringtoString(array) -> 将一个数组array转换成一个字符串(获取数组拼接的字符串,获取arr的内容,拼接成字符串)

//用1填充arr

Arrays.fill(arr1, 1);//value必须与数组类型相同

System.out.println(Arrays.toString(arr1));

4)voidfill(array,val) -> 把数组array所有元素都赋值为val

           5)copyOf(array,length) -> 把数组array复制成一个长度为length 的新数组,返回类型与复制的数组一致

int[] oldArr = {1,2,3,4};

//创建一个指定长度的数组,并把原数组的元素赋给新数组

int[] newArr = Arrays.copyOf(oldArr, oldArr.length+1);

System.out.println(Arrays.toString(newArr));

  6) binarySearch(array,val) -> 查询元素值val在数组array中的下标, (要求数组中元素已经按升序排列)

int[] arr3 = {1,2,3,4,5,6,7,8,9};

int num = Arrays.binarySearch(arr3, 5);

System.out.println(num);//4

4、二维数组的使用

1)语法:<数据类型>  [][ ]  数组名;  或者  <数据类型>  数组名 [ ][ ];

           int[] arr1 = {1,2,3};

int[] arr2 = {4,5,6};

//如果一个数组的元素还是一个数组,他就是一个二维数组

int[][] erWei ={arr1,arr2};

 

二维数组实际上是一个一维数组,它的每个元素又是一个一维数组

2)二维数组定义与赋值

//1、二维数组的定义

//方法1

int[][] arr1 = {{1,3,6},{2,5,8},{3,6,9}};

//方法2

int[][] arr2 = new int[2][3];

/*

* new int[m][n]

* m:二维数组的长度

* n:二维数组元素(也是一个数组)的长度

*/

//方法3

int[][] arr3 = new int[2][];

arr3[0] = new int[]{3,6,9};

arr3[1] = new int[]{4,5,6,7,8};

//2、二维数组的赋值

int[][] scores1=new int[][]{ { 90, 85, 92, 78, 54 }, { 76, 63,80 }, { 87 }};

int scores2[][] = {{ 90, 85, 92, 78, 54 }, { 76, 63,80 }, { 87 } };

3)二维数组与内存

4)遍历二维数组

//二维数组的遍历

//方法1

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

System.out.println(Arrays.toString(erWei[i]));

}

//方法2-双层for循环

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

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

System.out.print(erWei[i][j]+"\t");

}

System.out.println();

}

5)练习-5个班各5名学生某门课程的成绩,计算各班各自的总成绩?

public static void main(String[] args) {

int[][] scores = new int[2][2];

Scanner input = new Scanner(System.in);

//赋值

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

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

System.out.println("请输入"+(i+1)+"班第"+(j+1)+"个同学的成绩");

scores[i][j]=input.nextInt();

}

}

//求总成绩

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

int sum = 0;

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

sum+=scores[i][j];

}

System.out.println((i+1)+"班总成绩为"+sum);

}

}

5、方法

* 方法的定义

* 形式参数:位于方法体内,用来传递数据

* public static 返回值  方法名(数据类型  变量名){

*

* }

*

* public: 修饰符

* static:静态的

* void:  返回值

* test:   方法名

* {}      方法体

*/

                           public static int add(int num1,int num2){

int result = num1 + num2;

return result;//用来返回值

}

public static int minus(int num1,int num2){

int result = num1 - num2;

return result;

}

public static int multiply(int num1,int num2){

int result = num1*num2;

return result;

}

public static double divide(double num1, double num2){

double result = num1/num2;

return result;

}

时间: 2024-10-09 08:36:39

Stage 1 - Course 1 - JAVA基础知识的相关文章

黑马程序员——Java基础知识之多线程协同

多线程协同 线程间的通讯:对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤,但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必须用在

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

第1天:了解Java基础知识

Java的优势 1. 简单 不像C或者C++语言,Java中省去了对指针的操作.但是,Java中并没有省去指针,代替指针的是一种新的变量--引用,引用也是保存一个对象的内存地址. 2.方便 Java虚拟机自带垃圾回收器,能够自动回收内存资源.而C和C++语言,需要开发人员手动进行内存资源回收. 3.安全 不支持指针操作 4.平台无关性 Java语言是跨平台的,一次编译,到处运行. 而且,不同平台,C语言中数据类型所占的位数是不同的,而Java语言中,数据类型所占的位数是固定的. 5.面向对象 J

JAVA基础知识-java文化基础和运行环境

JAVA基础知识 1,java是95年sun公司推出的开发语言,发展很快,09年被oracle公司收购.至今分为SE.ME.EE三个发展方向和软件版本. 2,运行java的环境主要是通过JVM(java virtual machine)实现的.首先编写.java结尾的源文件,通过编译器编译成.class结尾的字节码文件,然后通过解释器实现在不同平台上一致运行的效果. 3,jvm,jre和jdk的区别:jvm,java虚拟机:jre,java运行环境,jdk:java开发工具包. 4,jdk的下载

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

Java基础知识——类装载器与反射机制

类装载器ClassLoader 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件. 类装载器把一个类装入JVM中,要经过三步: 1.装载:查找和导入Class文件: 2.链接:执行校验.准备和解析(解析是可以选择的): 3.初始化:对类的静态变量.静态代码块执行初始化工作: 类装载工作由ClassLoader及其子类负责.JVM在运行时会产生三个ClassLoader:根装载器.ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器). 根装

JAVA基础知识整理

一.首先先明白get与post的基本定义和区别: 这是两种在客户端和服务器端进行请求-响应的方法. 1get:从指定的资源请求数据. 2post:向指定的资源提交要处理的数据. get基本上用于从服务器取回数据,注意:get方法可能返回缓存数据. post可以从服务器上获取数据,不过,post方法不会缓存数据,并且常用语连同请求一起发送数据. 二. Jquery $.get()方法. $.get()方法通过Http Get发起请求,从服务器上请求数据. 语法:&.get(URL,callback