黑马程序员——java基础--环境搭建与基础语法

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


第一部分、环境搭建 DOS命令、Java语言特点、JDK、JRE、path、classpath、注释

第二部分、基础语法

一、运算符    二、流程控制        三、for循环         

四、函数         五、数组               六、内存

第一部分、环境搭建

一.常用Doc命令
                dir:列出目录
                md:创建目录
                rd:删除目录
                cd:进入目录
                cd..:退回上一级目录
                cd/:退回根目录
                del:删除文件
                exit:退出doc

二.Java语言的跨平台性

平台:指操作系统
                为什么可以跨平台?
                                :java有自己的语言解释器--------java虚拟机

三.Java环境搭建

1.运行环境jre:java  Runtime Envirenment
2.开发环境jdk:java  development   kit
jdk>jre >jvm
下载:
java.sun.com
www.orical.com
安装:
                独立的jre可装可不装;
                目录可以装在移动硬盘中,便携,少了注册表的信息,不能更新而已。
dos:
                可在jdk的安装目录下,使用java工具(bin);
                可若想 在其他目录下使用bin,就得告诉系统自己的路径,所以要配置环境变量。
                path
               系统环境变量的配置:把bin路径复制过去,后面加分号;
              最后在任意目录测试下,有效则配置ok。


四、环境变量配置的一个技巧:


              如果想修改目录或者文件夹名称,那么配置应该路径动态生成,新建一个变量:
               JAVA_HOME=E:\jdk\
               % JAVA_HOME %\bin;
              配置路径前置后置均可,前置系统查找快。


五、环境变量的临时配置:
             set 命令添加变量,只在本命令行窗口有效,有一特例,就是start启动的窗口。

六  、Helloword
             .java文件名可与类名不一致,一致更方便。
            加public,必须一致


七、classpath的配置
         同样的道理,可以配置成一劳永逸的,也可以配置成临时的。  ‘.’表示当前路径,多路径配置之间用’;’隔开,结束处不加分号为好。 jvm会先找classpath在找当前目录,这一点与path相反。
执行文件的总结:
        Java执行文件,找classpath
        非Java执行文件,找path.如qq.exe


八.主函数
由jvm调用,独立运行,是程序的入口


九、注释
有三种形式
                1.单行://
                 2.多行/*           */
                  3.文档/**       */
作用:
        解释说明
         调试
养成一种良好的书写习惯:
       1, 首先写注释,其中写明需求,思路和步骤;
       2,  然后,开始写代码。

 


第二部分、基础语法

一、运算符    

1、&和&&的特点

&:无论左边是true是false。右边都运算。

&&:当左边为false时,右边不运算。

|:两边都参与运算。

||:当左边为true。右边不运算。

2、负数的表示
对应二进制正数取反加一。

3、异或
左右数相同为假,不同为真。
规律:一个数与另一个数连续异或两次,得到自己。应用:加密,换位。
两数换位的三种写法:

//两整数交换数值
		int m=1;
		int n=9;
		//第一种:
		//适用于编程
		/*
		int temp=m;
		m=n;
		n=temp;
		*/
		//第二种:
		//这种方法有损失精度的危险
		/*
		m=m+n-m;
		n=m+n-n;
		*/
		//第三种:
		//技巧型,不易想到
		/*
		m=m^n;
		n=m^n;//m^n^n=m
		m=m^n;//m^m^n=n
		*/
		System.out.println("m="+m+",n="+n);

4、转义字符

通过\来转变后面字母或者符号的含义。

\n:换行。

\b:退格。相当于backspace。

\r:按下回车键。window系统,回车符是由两个字符来表示\r\n.

\t:制表符。相当于tab键。
练习
如何获得一个2进制数?用程序怎么实现?
   :   比如4位的取,先&15,再>>>4,取得下4位
0000-0000 0000-0000 0000-0000 0000-0110
0000-0000 0000-0000 0000-0000 0000-1111  =>1111
5、三元运算符:
 可以简化代码,但功能也有局限,它有返回结果。

二、流程控制

1、if…else
if..else的简写
if..else与三元运算符的区别
if..else是一个单条语句
技巧:
      用if排掉一个范围,else就能起到意想不到的妙用
代码演示:

/*
需求:得到一个2进制数
*/
import java.util.*;
class Basic 
{
<span style="white-space:pre">	</span>public static void main(String[] args)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>/*
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>System.out.println("请输入一个整数:");
<span style="white-space:pre">		</span>Scanner sc = new Scanner(System.in);//扫描键盘的输入
<span style="white-space:pre">		</span>int num = sc.nextInt();
<span style="white-space:pre">		</span>int tempt=num&15;//该低位数应该是与十六进制对应的数,所以 若超过10需要转
<span style="white-space:pre">		</span>if(temp>=10){
<span style="white-space:pre">			</span>char c=(char)(temp-10+'a');
<span style="white-space:pre">		</span>}else{
<span style="white-space:pre">			</span>char c=(char)(temp);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>System.out.println(c);
<span style="white-space:pre">		</span>*/
<span style="white-space:pre">		</span>int num=60;
<span style="white-space:pre">		</span>//16进制
<span style="white-space:pre">		</span>int n1 = num&15;
<span style="white-space:pre">		</span>int c=(n1>9)?(char)(n1-10+'a'):n1;
<span style="white-space:pre">		</span>//8进制
<span style="white-space:pre">		</span>//int temp = num&7;
<span style="white-space:pre">		</span>//System.out.println(c);
<span style="white-space:pre">		</span>//需求一:输出星期
<span style="white-space:pre">		</span>//需求二:力求简洁的写法
<span style="white-space:pre">		</span>int x=4;
/*
<span style="white-space:pre">		</span>if(x==3 || x==4 || x==5)
<span style="white-space:pre">			</span>System.out.print(x+"春");
<span style="white-space:pre">		</span>else if(x==6 || x==7 || x==8)
<span style="white-space:pre">			</span>System.out.print(x+"夏");
<span style="white-space:pre">		</span>else if(x==9 || x==10 || x==11)
<span style="white-space:pre">			</span>System.out.print(x+"秋");
<span style="white-space:pre">		</span>else if(x==12 || x==1 || x==2)
<span style="white-space:pre">			</span>System.out.print(x+"冬");
<span style="white-space:pre">		</span>else{
<span style="white-space:pre">			</span>System.out.print("输入有误");
<span style="white-space:pre">		</span>}
*/
<span style="white-space:pre">		</span>if(x>12 &&x<1)
<span style="white-space:pre">			</span>System.out.print("输入有误");
<span style="white-space:pre">		</span>else if(x>=3 && x<=5)
<span style="white-space:pre">			</span>System.out.print(x+"春");
<span style="white-space:pre">		</span>else if(x>=6 && x<=8)
<span style="white-space:pre">			</span>System.out.print(x+"夏");
<span style="white-space:pre">		</span>else if(x>=9 && x<=11)
<span style="white-space:pre">			</span>System.out.print(x+"秋");
<span style="white-space:pre">		</span>else
<span style="white-space:pre">			</span>System.out.print(x+"冬");
<span style="white-space:pre">		</span>
<span style="white-space:pre">	</span>}
}

2、switch语句
进行判断,遇到break或者‘}’结束
因为按顺序执行,所以case没有前后之分
default亦不分前后,反正最后执行
有没有break,影响很大,尤其是在default语句移动的情况下

3、switch语句的分析
a.对数值进行判断,类型包括byte,short,int ,char四种
b.适用于简单的数值判断,少,效率高
c.后续版本有所增强
4、while与do..while
无论如何,do..while会先执行一次

三、for循环
for(初始化表达式;条件表达式;操作后的循环表达式){}
:因为是三个表达式,所以可以灵活书写
最简单的无限循环:
for(;;){}
while(true){}

1、两种编程的小思想
累加
计数器

2、嵌套循环----大圈套小圈
注意对区间的理解,它由初始值和条件范围构成,也就是说可以通过这两个方面去控制它

3.Break,continue
两者单独使用,后面内容执行不到
break:跳出循环                                                                                      作用范围:loop,switch
continue:结束本次循环,进入下一次循环                                     作用范围:loop  

给循环体加标号:格式name+”:”

四、函数
定义函数的思想:尽可能只实现一个功能
考虑:返回结果,是否需要外部数据,实现什么功能
再次思考:三元运算符返回值
                      表达式返回值

函数重载(overload)
同类同名,参数列表不同,与返回类型没关系
参数列表:参数个数和类型
实现了重载后,为了提高代码的复用性,可以互相调用

五、数组

数据分为基本类型和引用类型两大类。基本类型为8种。引用类型有3大类,数组是三大应用类型之一。

1、数组常见问题
先说下,编译时 检查语法错误;运行时报异常
数组在运行时,常见错误:nullpointereception,arrayindexoutofboundsexception
数组的赋值:int[]arr=new int[3];
                          int[] arr=new int[]{1,2,3}定义并指定内容
                          int[]arr={1,2,3}简写
                           由上述三种可知,数组在明确知道长度时可用。
2、数组的运用
遍历
求最值
排序
选择:依次比较, 最小值往前排, 每一轮得到一个最小值
冒泡:相邻比较, 最大值往后排,每一轮得到一个最大值

//选择排序
	public static void selectSort(int[] arr){
		for(int m=0;m<arr.length-1;m++){
			for(int n=m+1;n<arr.length;n++){
				if(arr[m]>arr[n]){
					int temp=arr[m];
					arr[m]=arr[n];
					arr[n]=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++)//每轮比多少次
			  {
					if(arr[y]>arr[y+1])
					{
						int temp=arr[y];
						arr[y]=arr[y+1];
						arr[y+1]=temp;
					}	 
			  }      
		 }
	}
注意:
       在数组的排序中,要注意角标越界的问题
        在数组的排序中,要注意逻辑问题:多少轮 ,每轮多少次

排序中最快的希尔排序,三层for加位运算。
3、折半----查找
折半查找的思想:在有序数组中,通过折半,不断的重新锁定区间,区间在缩小。如果该数根本不存在,区间不存在;若果该数等于中间角标值,则为找到,此时mid=max=min?。

/*
需求:  1.折半查找
		2、插入
思路:
	
*/


class halfSearch
{
	public static void main(String[] args)
	{
		int [] arr={2,3,22,44,67,77,88,99};
		int index=getIndex3(arr,67);
		System.out.println(index);

	}
	//普通查找
	public static int getIndex(int[] arr,int key)
	{
		for(int i=0;i<arr.length;i++)
		{	
			if(key==arr[i])
				return i;
		}
		return -1;
	}

	//折半查找
	//折半的实质是在锁定区间
	public static int getIndex2(int[] arr,int key)
	{
		int min=0,
			max=arr.length-1,
			mid=(min+max)/2;
	
		while(key!=arr[mid])	
		{
			if(key>arr[mid])
				min=mid+1;
			if(key<arr[mid])
				max=mid-1;
			if(min>max)
				return -1;
			mid=(min+max)/2;

		}
		return mid;
	}
//折半查询:第二种
	public static int getIndex3(int[] arr,int key)
	{
		int min=0,
			max=arr.length-1,
			mid;
	
		while(min<=max)	
		{
			mid=(min+max)>>1;

			if(key>arr[mid])
				min=mid+1;
			else if(key<arr[mid])
				max=mid-1;
			else
				return mid;
		}
		return -1;
	}

}

在有序数组中插入一数,保持有序?
若果该数存在,插入位即为mid角标;
若果该数不存在,插入位为min角标。

4、循环条件
循环的难点在于循环条件不好找,怎么思考呢?
这个终止点,是逻辑的终止,是执行结果的终止。如:10进制转化2进制,可以通过思考去索取该终止点,但更应该通获得过实验获得,这大概是最可靠的做法吧。
5、指针的应用
用于在循环体中,计数或者指向,遍历中用法举例:
:  int pos=arr.length;
      --pos
     在遍历中赋初始值,int  x =pos;

6.二维数组
所存元素为数组。

/*
二维数组
装的是一维数组
下面,二维数组求和

思路:
先求一维,再求二维,大圈套小圈,用嵌套循环

*/

class twot
{
	public static void main(String[] args)
	{
		int[][] arr={{1,2,3},{4,5,6},{7,8,9,10}};
		sum(arr);

	}
	

	//二维数组求和
	public static void sum(int[][] arr)
	{
		int sum=0;
		for(int x=0;x<arr.length;x++)
		{
			for(int y=0;y<arr[x].length;y++)
			{
				sum+=arr[x][y];
			}
		}
		System.out.println(sum);
	}
}

六、内存

栈内存:存放局部变量
                   特点:用完自动释放
堆内存:new的数据
                    特点:1.有引用地址
                                 2.有用默认初始化值
                                 3.垃圾回收机制:当堆内存中的实体不被引用时,会被jvm当成垃圾,不        
                                定时调用垃圾回收机制   ,来清除
                                                                                                  

 

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值