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

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

Java语言的基础组成:
1、关键字
2、标识符
3、注释
4、常量和变量
5、运算符
6、语句
7、函数
8、数组

1、关键字:
被JAva赋予特殊含义的单词
类,接口,方法,变量等在命名的时候不能使用关键字

2、标识符:
程序中自定义的名称 例如:类名,接口,变量,方法
书写规则:由26个大小写字母,0-9,_ $组成;
1、数字不能开头
2、不能使用关键字(由于关键字已经被Java赋予特殊含义)
(main比较特殊,他不是关键字,但是它能够被Java虚拟机识别)

4、常量:
不能被改变的数值,使用 final 修饰
整数的表现形式:二进制,八进制,十进制,十六进制
一般数据使用十六进制来表示,主要原因是进制越大,表现形式越短

5、进制转换
进制越大,表现形式越短
1、首先把进制都转换成2进制,再通过2进制转换成其他进制

例子:十进制转换成二进制,例如:7
通过不断地除以2来计算,结果为:(7/2=3–>1)(3/2=1–>1) 二进制为:111,写的时候倒过来写
二进制转换成十进制就是乘以2的过程,最后相加:例如:1110 —>14

八进制为3位一组,十六进制为4位一组
例如:
01011010 —-> 132 (二进制转换成八进制)(数据不够在前面加0)
1010101111 —–> 2AF(二进制转换成十六进制)(数据不够在前面加0)

负数的二进制表现形式:例如:-7
7在内存中的变现形式为:4字节=32位(整数)
0000-0000 0000-0000 0000-0000 0000-0111 —> 7
1111-1111 1111-1111 1111-1111 1111-1000 —> 取反再加上1
+0000-0000 0000-0000 0000-0000 0000-0001
1111-1111 1111-1111 1111-1111 1111-1001 —>-7(二进制的表现形式)

6、变量:
变化的值,在内存中开辟一处空间,将不确定的数进行存储

数据类型:基本数据类型和引用数据类型

基本数据类型:数值型:整数型和浮点型:
整数型:byte(8位),short(16位),int(32位),long(64位)
浮点型:float(32位),double(64位)
字符型:char(16位)
布尔型:boolean(true,false)
引用数据类型:类(class),接口(interface),数组([])(String 是引用数据类型)
一个字节占8位

整数默认为int类型,小数默认为double类型

例题:byte b= 3;(3是int类型,自动判断是否属于byte的范围,若属于byte范围,自动强转,否则要手动强转内,然后进行赋值(强制转换成byte))
b = b+2;(报错:损失精度,由于b是一个byte类型,占1个字节,2是int类型,占4个字节
此时b自动向上提升,原则是小的向大的提升(byte–>int),这时候b自动向上提升就变成int类型,然后b与2相加,赋值时候b还是1个字节,int类型赋值给byte类型要强制转换,否则损失精度)
(两次运算,先加,然后再赋值)
正确写法:强制转换:b=(byte)(b+2)
byte b=2; b+=2;(不会报错,因为会自动强制转换)(一次运算,就是把左右两边和赋值给左边)

7、运算符:+ - * / %(取余)

实例:a++
a=2;b=++a; a=2;b=3;(a先自加然后再赋值给b)
a=2;b=a++; a=3;b=2;(先把a赋值给b,然后再自加)

转义符:\ 转变后面字母或符号 :
\n换行,\b退移,\r回车,\t制表符
Linux中:\n换行 Windows中:\r\n换行
char ch = ‘\n’(正确,因为\n看成是一个字符)

+=,-=,*=,/=,%=,==,!=,>,<,<=,>=,这些都是一个符号

8、逻辑运算符:
&(与),|(或),^(异或),!(非),&& ||(短路)

例子: x>3&x<6 (x大于3并且小于6)(两边都会进行判断)
&:true true = true , true false = false , false false = false

|: true true = true , true false = true, false false = false

^:true true = false , true false = true, false false = false

&&(x>3&&x<5)(当条件不满足左边的条件时候不会再判断右边的条件,直接返回结果)

||(当条件满足左边的时候不会再去判断右边的条件)
&& || :可以提高性能

位运算符:
<< (左移),>>(右移),>>>(无符号右移),~(反码)

例子:
0000-0000 0000-0000 0000-0000 0000-0111 右移两位变成1,前面用0补全
0000-0000 0000-0000 0000-0000 0000-0001 结果
3<<2 = 12 (3*2的平方)(左移几位就是 数 * 2的几次方 )
6>>3 =0.75 (左移几位就是 数 / 2的几次方 )(6/2的三次方=0.75 取整数0)

(>> 和 >>> 区别):
>>,最高位是什么补什么,是0补0,是1补1
>>>>,最高位无论是什么都补0,在进制转换与运算时候用到

异或:一个数异或同一个数两次的结果还是原来的数。例子:7^4^4=7

两个值互换:
1、通过第三方变量来实现
2、n=n+m,m=n-m,n=n-m(容易损失精度,不明确nm的值)
3、n=n^m,m=n^m,n=n^m

9、三元运算符:a>b?a=0:b=0
例子:
x>1?’a’:200 (输出结果如果都是整数, ‘a’会自动提升变为ASCII码表的值)
三元运算符局限性:必须要有结果,if else 不一定需要有结果

函数的定义:
1、函数就是定义在类中的具有特定功能的一段独立小程序,也称为:方法

2、函数的使用:当代码出现了重复,为了提高代码的重用性,对代码进行了提取
函数的格式:修饰符 返回值类型 函数名(参数类型 参数……………){
执行语句;
return 返回值;
}
3、若是没有返回值,返回值类型为void

4、函数内部不能再包含函数,函数之间都是平级的

5、函数的重载:在同一个类中,允许存在一个以上的同名函数,只要他们的 参数个数或者参数类型不同 即可
特点:与返回值的类型无关,只和参数有关
好处:提高代码的阅读性,优化程序设计
使用:函数功能相同,但是参与运算的未知内容不同,这时候定义一个函数名称表示功能,使用参数列表区分同名函数

6、如何定义一个函数:
1、首先明确运算结果的类型
2、是否需要未知内容参与运算
注意:定义功能的时候不要做多余的功能,本来想要定义一个求最大值的功能,结果把打印功能一起写上,只要完成想要的功能即可,打印是调用者的事情

数组:
概念:同一种类型数据的集合,也就是容器
好处:自动给数组中的元素从0开始编号,方便操作这些元素(查找)
格式:一维数组:
int[] arr = new int[10] ,int arr[] = new int [10],int[] arr = {0,1,2,2,3,4}

二维数组:
int [][] arr = new int [1][1] ,int arr[][] = new int [1][1],int[] arr [] = new int [1][1]

栈:
1、用于存储实体的引用(地址值),数据用完自动释放

堆:
1、数组和对象,通过new创建的实例都在堆中开辟一处空间
2、每一个实例都有内存地址
3、实体的变量都有默认的初始值
4、实体不再被使用的时候会在不确定的时间被垃圾回收器回收

这里写图片描述

1、局部变量和调用方法时都会在栈中开辟一处空间,当变量或方法运行完会自动释放空间
2、arr中的值是数组在内存中的地址值,元素默认值都为0,Boolean类型的都为false
3、arr=null时候,arr不再指向数组,此时数组不再被调用,并在不确定的时间回收内存
4、方法中传递参数时候都是传递的地址值,java中只有值传递,没有引用传递 ,只不过在方法中传递的值是一个引用
5、地址值:[I@3c0007 ,[ (表示数组),I(表示int类型),@,3c0007(内存中的地址)(整个是哈希值,16进制)

排序实例 :


 "/**
  * 选择排序法 外循环为第一个数,内循环是第一个数与整个数组的每一个数进行比较,然后交换位置
  * 以此类推
  */"
 public static void toHax(int[] arr) {
  for (int i = 0; i < arr.length; i++) {
  "// i+1说明不需要与之前的数进行比较,只是不断地向后比较"
   for (int j = i + 1; j < arr.length; j++) {
   "// 第一个数一直与整个数组进行比较"
    if (arr[i] > arr[j]) {
     int temp = arr[j];
     arr[j] = arr[i];
     arr[i] = temp;
    }
   }
  }
  System.out.println("选择排序");
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i] + ",");
  }

 }

 "/**
  * 冒泡排序法
  * 一个数组相邻的两个进行比较,若是符合条件就进行换位,否则不换位
  * 外圈循环是循环次数,内圈循环是两个数进行比较
  */"
 public static void toMax(int[] arr) {
  for (int i = 0; i < arr.length - 1; i++) {
  "// 由于多次比较后面的数字已经确定,没必要再进行比较,所以减去i"
   for (int j = 1; j < arr.length - i; j++) {
    if (arr[j - 1] > arr[j]) {"// 最好用j-1,这样不会超出数组长度"
     int temp = arr[j];
     arr[j] = arr[j - 1];
     arr[j - 1] = temp;
    }
   }
   System.out.println("");
   for (int k = 0; k < arr.length; k++) {
    System.out.print(arr[k] + ",");
   }
  }
 }

 "/**
  * 折半查找法
  * 条件:数组必须是有序的,否则不能查找
  */"

 public static void halfMethod(int[] arr, int key) {
  int min = 0, max = arr.length, mid = (min + max) / 2;

  while (arr[mid] != key) {"// 判断中间值是否等于key值"
   if (arr[mid] > key) {"// 如果中间值大于key值"
    max = mid - 1;"/ 向左移动,中间值减一等于max"
   } else if (arr[mid] < key) {"// 向右移动"
    min = mid + 1;
   }
   if (min > max) {"// 当数据不存在时候会发生的情况"
    System.out.println("key = " + -1);
    return;
   }
   mid = (min + max) / 2;"// 重新获取中间值"
  }
  System.out.println("key = " + arr[mid]);
 }

 "/*
  * 进制转换 思路:默认全部转换成二进制,然后在转换成其他进制
  */"

 public static void jinzhi(int num) {
  "// 定义一个字符数组,包含0-9,a-f"
  char[] ch = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
  "// 定义一个字符串容器"
  StringBuffer sb = new StringBuffer();
    "//当数据的十进制不为0的时候"
  while (num != 0) {
    "//转成16进制数与上15,转成8进制与上7,转成2进制与上1"
   int temp = num & 15;
   "//现在字符数组中查找对应的字符,然后添加到StringBuffer中"
   sb.append(ch[temp]);
   "//16进制移4位,8进制移3位,2进制移1位,不使用>>,是因为当为负数的时候不能把有效位移干净,所以使用>>>"
   num = num >>> 4;
  }
  "//字符串反转输出"
  System.out.println(sb.reverse());

  System.out.println(Integer.toOctalString(-12));"//八进制"
  System.out.println(Integer.toHexString(-12));"//16进制"
  System.out.println(Integer.toBinaryString(-12));"//2进制"
 }
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值