黑马程序员_java基础(1)

来源:互联网 发布:空知英秋讨厌中国 知乎 编辑:程序博客网 时间:2024/05/16 14:03

------- android培训、java培训、期待与您交流! ----------

(day01)-java基础知识和环境变量配置********************************************************
@@dos命令行:
 dir:列出当前目录下的文件以及文件夹
 md:创建目录
 rd:删除目录(在dos下删除目录,要确定里面内容为空;可以先del 目录名,表示先删除目录里面所有文件(不是文件夹),再rd 目录名如果目录中有目录,要一层层进去删掉所有文件,再删除文件夹。)
 cd:进入指定目录
 cd..:退回上一级目录
 cd\:退回到跟目录
 del:删除文件
 exit:退出dos命令行
 echo 内容>文件名.后缀名:创建文件
SUN(Stanford University NetWork),java与平台(OS)无关
5.0后
JAVAEE(Java Platform Enterprise Edition)企业版,web开发
JAVASE(Java Platform Standard Edition)标准版,小型应用程序
JAVAME(Java Platform Micro Edition)小型版,手机中应用程序。
跨平台性:原理,在OS上安装一个Java虚拟机(JVM Java Virtual Machine),由jvm来负责Java程序在该OS上运行。
JRE(Java Runtime Environment Java运行环境)
 包括:jvm和核心类库
JDK(Java Development Kit Java开发工具包)
 包括:开发工具(编译工具javac.exe,打包工具jar.exe),也包括了JRE.
@@匹配环境变量
 创建JAVA_HOME:D:\jdk1.6.0_11
 创建CLASSPATH:.,%JAVA_HOME%\lib
  classpath变量的最后面如果有";"(jvm先找CLASSPATH,再找当前目录;没有";"就不再找当前目录了)
  (path,先找当前路径,再找path变量。)
 在Path最前面添加:%JAVA_HOME%\bin;
临时匹配:当前dos窗口有效 
 dos下,set命令;
 set path=I:\jdk1.6.0_11;%path%
 set CLASSPATH=.;I:\jdk1.6.0_11\lib
public static void main(String[] args)//保证主函数所在类能独立运行。
文档注释:可以通过javadoc.exe编译成程序说明书。
javadoc -d e:\myhelp -author -version ArrayTool.java
注意:
 类名必须被public修饰才生成帮助文档。
 被public和protected修饰的方法会生成在帮助文档中,private修饰的方法不提取进文档。
 -author -version 这样帮助文档中才有这两个信息。

一个类中如果没有构造函数,系统会默认一个空参数的构造函数(看不见的才是默认构造函数)
它的权限和所属类的权限一致
如果类被public修饰,那么默认的构造函数也带public修饰符
如果类没有被public修饰,那么默认的构造函数也没有public修饰符
     
/**
这是一个可以对数组进行操作的工具类,该类中提供了,获取最值,排序等功能。
@author 王自强
@version V1.1
*/
public class ArrayTool
{
 /**
 空参数构造函数
 */
 ArrayTool(){}--------->没有写进帮助文档
 /**
 获取一个数组中的最大值
 @param arr 接受一个int类型的数组
 @return 会返回该数组中的最大值
 */
 public static int getMax(int[]arr)
 {
  int max=0;
  for(int x=1;x<arr.length;x++)
  {
   if(arr[x]>arr[max])
    max=x;
  }
  return arr[max];
 }
}
(day02)Java语言基础组成********************************************************************
--关键字,标示符,注释,常量和变量,运算符,语句,函数,数组。
2.1关键字
@@数据类型-class,interface,byte,short,int,long,float,double,char,boolean,void
(占字节数--byte:1/short:2/char:2/int:4/float:4/double:8/long:8/一个汉字GBK:2)
数据类型值-true,false,null
流程控制-if,else,switch,case,default,while,do,for,break,continue,return
访问权限修饰符-public,private,protected
类、函数、变量的修饰符-abstract,final,static,synchronized
类的修饰符-extends,implements
建立实例、引用实例、判断实例-new,this,super,instanceof
异常-try,catch,finally,throw,throws
包-package,import
其它-native,strictfp,transient,volatile,assert
2.2标示符:字母的大小写,数字,_,$;
 规则:数字不可以开头,不可以使用关键字。严格区分大小写。
 规范:包名小写;类名接口名所有单词首字母大写;
       变量名函数名 首单词字母小写,其它大写;常量名大写及_;
2.4常量和变量
""中的是字符串常量;
''中的是字符常量;
八进制:用0开头
十六进制:用0x开头
十进制-->二进制:除以2,取余数反向排
二进制-->十进制:乘以2的幂数。
四个二进制就是一个十六进制。
三个二进制就是一个八进制。
负数的二进制表现形式:对应的正数二进制取反加1;负数最高位都是1。
@@数据类型
 基本数据类型:
  数值型:整数-byte,short,int(整数默认),long;浮点类型-float,double(小数默认)
  字符型:char
  布尔型:boolean
 long l = 45l;//后面写个 l ,表示是long型。
 float f = 2.3f;
 char ch =' ';
 boolean = true;
 
 引用数据类型:类class 接口interface 数组[] String
类型转换:(大范围数据类型数据=小范围数据类型数据,编译通过;运算通过
   小范围数据类型数据=大范围数据类型数据,编译失败。
  小范围数据类型数据=(小范围数据类型)大范围数据类型数据--进行了强转操作。
 byte = 3;
 b =(byte)(b+3);
@@2.5运算符-算术,赋值,比较,逻辑,位,三元
int x=4270;x=x/1000*1000;//4270是int(4位)型,4270/1000,结果为4(int型),因为无法变为4.27(double型八位)
取模后值的正负看左边:1%5为1;-1%5为-1;1%-5为1;
字符串和任何数据使用+都是相连接,最总都会变成字符串。
转义字符:通过\来转变后面字母或符号的含义。
 \n:换行(linux)  \r\n:换行(windows)  dos下可以直接识别\n
 \b:退格,Backspace
 \r:按下回车键   window系统,回车符是由两个字符\r\n来表示的。
 \t:制表符,Tab键
short s = 4;
s = s+5;//编译失败。做两次运算,先+,然后=。因为s会被提升为int类型,运算后还是int,无法复制给short类型。
s+=5;//编译通过。做一次运算,将右边的值赋给左边。因为+=运算在给s复制时,自动完成了强转操作。
逻辑运算符:
 &,&&(短路),|,||(短路),!非,^异或(相异为true)
位运算符:
<< 左移(低位补0) 乘以2的n次幂
>> 右移(高位补原符号) 除以2的n次幂
>>> 无符号右移(高位补0)   (移n位,就是乘以或者除以2的n次幂)
& 与
| 或
^ 异或  m^n^n结果为m     (n可以作为密钥)
~ 反码
不借用第三变量互换两变量,
n = n+m;
m = n-m;
n = n-m;(容易损失精度)
//1^0=1,0^1=1;1^1=0;0^0=0;
//1^0^0=1;0^1^1=0;
n = n^m;
m = n^m;
n = n^m;
三元运算符:变量 = (条件表达式)?表达式1:表达式2
switch(表达式)
{
 case 取值1:执行语句;break;
 case 取值2:
 case 取值3:执行语句;break;
 ......
 deafult:执行语句;break;
}
@@(day03)循环***************************************************************************
while(条件表达式)
{
 执行语句;
}
do
{
 执行语句;
}while(条件表达式);        //切记do{}while;后面的分号!
for(初始化表达式;条件表达式;循环后的表达式)//条件表达式必须结果是boolean
{
 执行语句;
}
for和while的区别:
 for循环初始化的变量只在循环体内有效,循环结束后,内存释放相应资源。
 while循环初始化动作在循环体外实现,循环结束后,内存还没有释放相应资源。
无限循环:
 for(;;)
 while(true){}
ForFor:尖向上,改变条件表达式
       尖向下,改变初始值。
//需求:打印99乘法表
 for(int x=1;x<10;x++)
 {
  for(int y=1;y<x+1;y++)
  {
   System.out.print(x+"*"+y+"="+(x*y)+"  ");
  }
  System.out.println();
 }
continue(循环结构):结束本次小的循环,继续下次小的循环。
 continue和break单独存在时,后面写语句不能编译通过。
 for(int x=0;x<10;x++)
 {
  continue;//或者 break;
  System.out.println();//不能编译通过。
 }
break(选择结构,循环结构):跳出所在的整个循环体。
标号的出现,可以让这两个语句作用于指定的范围。
w:for(int x=0;x<3;++)
{
 q:for(int y=0;y<4;y++)
 {
  System.out.println("x="+x);
  break w;//break作用于w循环,所以跳出w循环
 }
}//打印 0

w:for(int x=0;x<3;++)
{
 q:for(int y=0;y<4;y++)
 {
  System.out.println("x="+x);
  continue w;//continue所用于w循环,所以跳出本次q循环
 }
}//打印 0 1 2
@@函数:定义,特点,应用,重载
修饰符 返回值类型 函数名(参数类型 形参1,参数类型2,形参2)
{
 执行语句;
 return;//返回值类型是void时,return可以不写。
}
函数中只能调用函数,不可以在函数内部定义函数(主函数内部也不能定义函数!)
修饰符(可以无),但是必须有static。静态函数只能调用静态函数。
如何定义一个函数?
 1,既然函数是一个独立的功能,那么该功能的运算结果是什么先明确,
    因为这是在明确函数的返回值类型。
 2,再明确在定义该功能的过程中是否需要未知的内容参与运算,
     因为这是在明确函数的参数列表。
函数重载:同一个类中,一个以上的同名函数,参数个数或者参数类型不同即可重载!与返回值类型无关!
数组:同一种数据类型的集合,其实数组就是一个容器。
@@内存结构:
java在启动时,在内存中划分了5片内存空间。
每一片区域都有特定的处理数据方式和内存管理方式。
 栈内存:用于存储局部变量,当数据用完时,空间自动释放。函数执行的地方。
 堆内存:数组和对象,通过new建立的实例都存在堆内存中
  每一个实体都有内存地址值
  实体中的变量都有默认初始化值
  实体不再被使用,会在并不确定的时间内被垃圾回收器回收
 方法区(共享区、数据区):类中的共享数据,存放类中的方法和方法体。
 本地方法区:
 寄存器:
局部变量:定义在方法内的变量,方法参数上的变量,定义在for循环中的变量。
int[] x = new int[3];
x是局部变量,在栈内存里;int[0]int[1]int[2]是实体,在堆内存里;
初始化时,jvm将int[0]的地址值赋给x,x中存的是一个0x0079十六进制的地址值。x指向了(引用了)这个数组。
实体中的变量都有默认初始化值
 int:0
 long:0l
 folat:0.0f
 double:0.0
 boolean:false
 char:空格   即 '\u0000'
 二维中的一维数组:null
 String:null
c++中的实体,必须被程序员手动释放空间。忘记了则影响效率。
java中的实体,会被垃圾回收器不定时的回收空间。
(day04)数组,排序,进制转换*******************************************************************
int[] arr = new int[5];也可以int arr[] = new int[5];
编译时只检查语法错误,运行时,再在堆内存中分配空间,
ArrayIndexOutOfBoundsException数组角标越界异常
NullpPointerException空指针异常:当引用没有任何指向,值为空时,该引用还在操作实体。
数组元素个数:arr.length
System.out.println(arr);//打印出数组的引用了(地址),而不是实体
//打印出 [I@de6ced
[ --表示引用是一个数组类型的引用
I --int型的数据
de6ced -- 数组的内存存放地址,由hash算法算出的hash值,十六进制。
@@选择排序selectSort:遍历所有元素,将每个元素与它后面的元素进行比较,符合条件就换位。
 内循环一次,最值出现在头角标位置上。
 for(int x=0;x<arr.length-1;x++)
 {
  for(int y=x+1;y<length;y++)
  {
   if(arr[x]>arr[y])
   {
    int temp = arr[x];
    arr[x] = arr[y];
    arr[y] = temp;
   }
  }
 }
冒泡排序bubbleSort:相邻的元素进行比较,符合条件就换位。
 第一圈,最值出现在最后位。
  for(int x=1;x<arr.length;x++)
  {
   int max=0,temp=0;
   for(int y=1;y<arr.length-x+1;y++)
   {
    if(arr[max]<arr[y])
    {
     max = y;
    }
   }
   temp = arr[arr.length-x];
   arr[arr.length-x] = arr[max];
   arr[max] = temp;
  }
最快的排序:希尔排序。
Arrays.sort(arr):开发中使用的数组排序。******
折半查找halfSearch:前提是数组是有序的。
 while(arr[mid]!=key)
 {
  if(key>arr[mid])
   min=min+1;
  else(key<arr[min})
   max=min-1;
  mid=(max+min)/2;
 }
 return mid;
进制转化
public static void trans(int num,int base,int offset)
 {
  if(num==0)
  {
   System.out.println(0);
   return;
  }  
  char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',};
  char[]arr=new char[32];
  int pos=arr.length;
  while(num!=0)
  {
   int temp=num & base;
   arr[--pos]=chs[temp];
   num=num>>>offset;
  }
  for(int x=pos;x<arr.length;x++)
  {
   System.out.print(arr[x]);
  }
 }

 ------- android培训、java培训、期待与您交流! ----------

原创粉丝点击