关键字 | ||||
---|---|---|---|---|
abstract | assert | boolean | break | byte |
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | syncheonized | this | throw | throws |
transient | try | void | volatile | while |
/* 单行注释 :// 多行注释 :/* */ /* 文档注释 :/** * * */
整数类型
浮点类型
public class Practice { public static void main(String[] args) { int i = 10; int i2 = 010; //八进制0 int i3 = 0x10; //十六进制0x System.out.println(i); System.out.println(i2); System.out.println(i3); System.out.println("======================"); //浮点数拓展 //BigDecimal 数学工具类 //float //double float f = 0.1f; //0.1 double d = 1.0/10; //0.1 System.out.println(f==d); //print false float d1 = 2323156156654654646f; float d2 = d1+1; System.out.println(d1==d2); //print true //字符拓展 System.out.println("====================="); char c1 = 'a'; char c2 = '中'; System.out.println(c1); System.out.println((int)c1); System.out.println(c2); System.out.println((int)c2); //编码 Unicode 0 - 65536 //转义字符 // \t \n \\ \" \' \? \0 ... System.out.println("Hello\nWord"); } }
Java是强类型语言,所以要进行有些运算时,需要进行类型转换
低 ········································-> 高 byte,short,char-> int -> long -> float -> double
运算中,不同类型的数据先转换为同一类型然后再进行计算
不能对布尔值进行类型转换
不能把对象类型转换为不相干的类型
再把高容量转换到低容量的时候,强制转换
转换时可能存在内存溢出问题,或者精度问题
public class Practice_2 { public static void main(String[] args) { int i = 128; //强制转换 byte b = (byte)i; //内存溢出 System.out.println(i); System.out.println(b); // 精度损失 System.out.println("===================="); System.out.println((int)23.7); //23 System.out.println((int)-45.89f); //-45 //char - int System.out.println("===================="); char c = 'a'; int d = c+1; //自动转换 System.out.println(d); //put 98 System.out.println((char)d); //put b //注意溢出 //操作比较大的数时,要注意溢出问题 //JDK7新特性,数字之间可以用下划线分割 int money = 10_0000_0000; int years = 20; int total_1 = money*years; //-1474836480,溢出 ! long total_2 = money*years; //money*years 为int类型,转换前以经溢出 long total_3 = money*(long)years; //正常输出 System.out.println(total_1); System.out.println(total_2); System.out.println(total_3); } }
变量:可以修改的值(c语言 可修改的左值)
Java是一种强类型语言,每个变量都必须声明其类型
变量要素包括:变量名,变量类型,作用域
初始化后不可以改变的值
- 所有变量,方法,类名:见章知意
- 类成员变量,局部变量,首字母小写和驼峰原则:如 lastName , monthSalary
- 常量:大写字母和下划线:如 MAX_VALUE
- 类名:首字母大写和下划线
- 方法名:首字母小写和驼峰原则
public class Practice_3 { //属性:变量 //类变量 static static double salary = 2500; //实例变量: 从属于对象: 如果不自行初始化,这个类型默认值 0 0.0 //布尔值:默认是false //除了基本类型,其余都是null String name; int age; //常量 final static final double PI = 3.1415; //main方法 public static void main(String[] args) { //局部变量:必须声明和初始化值 int i = 10; System.out.println(i); //变量类型 变量名字 = new Practice_3(); Practice_3 practice_3 = new Practice_3(); System.out.println(practice_3.age); System.out.println(practice_3.name); //类变量 static System.out.println(salary); //常量 final System.out.println(PI); } //其它方法 public void add(){ } }
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间
包的作用
包的语法格式
package pkg1[.pkg2[.pkg3…]];
为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 “import” 语句可完成此功能。
在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
import package1[.package2…].(classname|*);
如果在一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略
javadoc命令是用来生成自己API文档的
避免乱码 -encoding UTF-8 -charset UTF-8
/** *@author 作者名 *@version 版本号 *@since 指明最早使用的jdk版本 *@param 参数名 *@return 返回值情况 *@throws 异常抛出情况 */
Java.util.Scanner
是Java5的新特性,通过Scanner类来获取用户的输入Scanner s = new Scanner(Syatem.in);
next() 和 nextLine() 方法
获取输入字符串,使用```hasNext() 和 hasNextLine() 判断是否还有输入的数据/* next(); 1.读取到有效字符后才可以结束 2.有效字符之前遇到空白,next()方法会自动将其去掉 3.只有输入有效字符之后才将其后面的空白作为分隔符或者结束符 4.next()不能的都带有空格的字符 */ package com.baidu.www.scanner; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { //创建一个扫描器对象,用于接受键盘数据 Scanner scanner = new Scanner(System.in); System.out.println("使用next方式接受: "); //判断用户有没有输入字符串 if (scanner.hasNext()){ String str = scanner.next(); System.out.println("输出的: "+str); } //凡是属于IO流的类如果不关闭就会一直占用资源 scanner.close(); } }
/* nextLine(); 1.以Enter为结束符 2.可以获得空白 */ package com.baidu.www.scanner; import java.util.Scanner; public class Demo02 { public static void main(String[] args) { //创建一个扫描器对象,用于接受键盘数据 Scanner scanner = new Scanner(System.in); System.out.println("使用nextLine方式接受: "); //判断用户有没有输入字符串 if (scanner.hasNextLine()) { String str = scanner.nextLine(); System.out.println("输出的: " + str); } //凡是属于IO流的类如果不关闭就会一直占用资源 scanner.close(); } }
if else 结构
switch 结构
goto 结构
- While循环
- Do While循环
- For 循环
- 增强for循环
package com.baidu.www.scanner; public class Demo03 { public static void main(String[] args) { int[] number = {10,20,30,40,50}; for (int i = 0; i < 5; i++) { System.out.println(number[i]); } System.out.println("=============="); //For 增强 for (int x:number){ System.out.println(x); } } }
如:System.out.println();
Java是一系列语句的集合,它们在一起执行一个功能
设计方法原则:方法的本意是功能块,就是实现某个语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能
方法命名规则:首字母小写和驼峰原则
package com.baidu.www.method; public class Demo02 { public static void main(String[] args) { double max_1; int max_2; max_1 = max(20.0,10.0); max_2 = max(20,10); if (max_1 == -1) System.out.println("equal"); else System.out.println(max_1); System.out.println((max_2==0 ? "equal" : max_2)); } public static int max(int x1,int x2){ if(x1 == x2) return 0; else return (x1 > x2) ? x1 : x2; } public static double max(double x1,double x2){ if(x1 == x2) return -1.0; else return (x1 > x2) ? x1 : x2; } }
package com.baidu.www.method; public class Demo04 { public static void main(String[] args) { System.out.println(test(10)); } public static int test(int n){ if (n==1) return 1; else return n*test(n-1); } }
静态方法
非静态方法
形参和实参
值的传递和引用传递
this关键字
首先需要声明数组:
dataType[] arrayRefVar; //首选方法 dateType arrayRefVar[]; //向c兼容
Java语言使用new操作符来创建数组,语法如下:
arrayRefVar = new dateType[arraySize];
数组元素是通过索引访问的,数组索引从开始
获取数组长度:arrays.length
package com.baidu.www.array; public class ArrayDemo01 { public static void main(String[] args) { int[] arrays = {1,2,3,4,5,6,7,8,9}; view(arrays); System.out.println("\n"); view(revert(arrays)); } //打印数组 public static void view(int[] arrays){ for (int array : arrays) { System.out.print(array + " "); } } public static int[] revert(int[] arrays){ int[] arrayRevert = new int[arrays.length]; for (int i=0,j=arrays.length-1;i <arrays.length;i++,j--){ arrayRevert[j] = arrays[i]; } return arrayRevert; } }
public class ArrayDemo02 { public static void main(String[] args) { int[][] arrays = { {1,2,3,5,6,6}, {2,5,6,68,5}, {2,3,5,6,8,9,8}, {2,3,5,8,9,10}}; for (int i = 0; i < arrays.length; i++) { for (int j = 0; j < arrays[i].length; j++) { System.out.print(arrays[i][j]+" "); } System.out.println(); } } }
package com.baidu.www.array; import java.util.Arrays; public class ArraysDemo03 { public static void main(String[] args) { int[] array = {1,2,3,2,5,7,8,9}; System.out.println(Arrays.toString(sort(array))); } public static int[] sort(int[] array){ //int middle; for (int i = 0; i < array.length-1; i++) { boolean flag = false; //记号 for (int j = array.length-1; j > i; j--) { if(array[j] < array[j-1]) { /* middle = array[j]; array[j] = array[j-1]; array[j-1] = middle; */ array[j] = array[j]^array[j-1]; array[j-1] = array[j-1]^array[j]; array[j] = array[j-1]^array[j]; //交换数值 flag = true; //标志排序 } } if(!flag) break; } return array; } }
import java.util.Arrays; public class ArrayDemo04 { public static void main(String[] args) { //创建一个11*11的数组 //(1,2) = 2 , (4,5) = 1 int[][] arrays1 = new int[11][11]; arrays1[1][2] = 2; arrays1[4][5] = 1; //输出原始数组 for (int[] ints : arrays1) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); } System.out.println(); //获取已初始个数 int num = 0; for (int[] ints : arrays1) { for (int anInt : ints) { if (anInt != 0) num++; } } //创建稀疏数组 num+1; int[][] arrays2 = new int[num+1][3]; arrays2[0][0] = 11; //11 行 arrays2[0][1] = 11; //11 列 arrays2[0][2] = num; //有效值个数 //将有效数值赋值给稀疏数组 int order = 0; for (int i = 0; i < arrays1.length; i++) { for (int j = 0; j < arrays1[i].length; j++) { if(arrays1[i][j] != 0){ order++; arrays2[order][0] = i; arrays2[order][1] = j; arrays2[order][2] = arrays1[i][j]; } } } //打印稀疏数组 for (int[] ints : arrays2) { System.out.println(Arrays.toString(ints)); } System.out.println(); //还原数组 int[][] arrays3 = new int[11][11]; for (int i = 0; i < arrays2[0][2]; i++) { arrays3[ arrays2[i+1][0] ][ arrays2[i+1][1] ] = arrays2[i+1][2]; } //打印已还原数组 for (int[] ints : arrays3) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); } } }
堆
存放new的对象和数组
可以被所有线程共享,不会存放别的对像引用
栈
存放基本变量类型(会包含这个基本类型的具体数值)
引用对象的变量(会存放这个引用在堆里面的具体地址)
方法区
可以被所有线程共享
包含了所有class和static变量
对于描述复杂的事物,为了从宏观上把握,从整体上分析,我们需要使用面对对象的思路来分析整个系统。但是具体到微观操作,任然需要面对过程的思路去处理
面向对象编程(Object-Oriented Programming,OOP)
以类方式组织代码,以对象组织(封装)数据
三大特性:封装,继承,多态
/* 实例化对象 */ Object referenceVariable = new Constructor(); /* 访问类中的变量 */ referenceVariable.variableName; /* 访问类中的方法 */ referenceVariable.methodName();