DOS基本命令
1:由C盘直接进去E盘
2:cd(进入)
3:cd…进入上一个目录
4:cd \进入根目录
运行时的问题
1编译时写文件名,运行时写文件中的类名。
标识符
标识符:类名,变量名,常量名,方法名。
由“字母”,“—”,“美元符”开头组成。
什么是JDK/JRE?
JDK:开发工具
JRE:运行环境
简单而言就是用JDK进行开发,交给JRE去运行。
数据类型
%d 输出整型
%x %#x %X
java不支持数据自动扩充,如果数据过大会报错。
Unicode码占两个字节
算术运算符
+可以表示数值相加
+可以表示字符串联结
如“123”+“abc”的结果是123abc
取余
C语言中取余都得是实数
Java则不需要,可以是非实数
位运算符
“&&”逻辑运算符
“&”按位与 将左右两边数值的二进制位相与
“|”相或
“~”取反
"^"异或
右移>>:
若有符号数,右移时符号也随之移动。
当为正数时,最高位是0,最高位补0,最高位为1,最高位补1。
右移>>>:无论最高位是0还是1,移动后空位补零
左移同理。
堆栈
A aa = new A();
aa 栈中内存, A 堆,堆栈结合。
堆中自动释放,栈中手动释放。
数组
一维数组实现
public static void main(String[] args) {
int[] a={3,4,5,6,7,8};
for(int x:a){
System.out.println(x);
二维数组实现
public static void main(String[] args) {
int[][] a={{3,4,5},{6,7,8}};
for(int[] x:a){
for(int y:x)
System.out.println(y);
}
不如for循环能遍历到每一个数字。
两数交换
一般交换
public static void main(String[] args) {
int x=100,y=200,z;
System.out.println(x + "\t"+y);
z=x;
x=y;
y=z;
System.out.println(x+"\t"+y);
两数相减
public static void main(String[] args) {
int x=100,y=200;
System.out.println(x + "\t"+y);
x=x+y;
y=x-y;
x=x-y;
System.out.println(x+"\t"+y);
数值过大会损失精度
位运算(最优解)
public static void main(String[] args) {
int x=100,y=200;
System.out.println(x + "\t"+y);
x=x^y;
y=x^y;
x=x^y;
System.out.println(x+"\t"+y);
一个数异或同一个数两次,结果还是那个数,而且不会超出int范围(注意x与y不能相同)
Static
1:可供多个对象共用一个static属性。
2:static的属性i属于类本身。
3:一个事物能够被访问需要具备非私有+静态。
4:static只是具备了可以被类名访问的特征,但如果真正访问还需要非私有。
5:static就是类本身一个属性。
6:非静态方法可以访问静态方法,反之不行。(静态方法不一定存在非静态方法,非静态方法可能存在静态方法)
静态成员
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。
public class StaticTest{
public static String string="shiyanlou";
public static void main(String[] args){
//静态成员不需要实例化 直接就可以访问
System.out.println(StaticTest.string);
//如果不加static关键字 需要这样访问
StaticTest staticTest=new StaticTest();
System.out.println(staticTest.string);
//如果加上static关键字,上面的两种方法都可以使用
}
}
静态方法
被 static 修饰的方法是静态方法,静态方法不依赖于对象,不需要将类实例化便可以调用,由于不实例化也可以调用,所以不能有 this,也不能访问非静态成员变量和非静态方法。但是非静态成员变量和非静态方法可以访问静态方法。
输入
整型输入:
package hello;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner s= new Scanner(System.in);
int a = s.nextInt();
System.out.println("第一个整数:"+a);
int b = s.nextInt();
System.out.println("第二个整数:"+b);
}
}
字符输入:
package hello;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner s= new Scanner(System.in);
int a = s.nextInt();
System.out.println("第一个整数:"+a);
String b = s.nextLine();//代替空格;如果不写,无法输入字符。
String c=s.nextLine();
System.out.println("读取的字符是:"+c);
}
}
逻辑运算符
长路与(&),短路与(&&);
同:
两真才真,一假即假;
异:
长路与(&)两边都运算;
短路与(&&)如果发现第一个是假,第二个不运算;
长路或(|),短路或(||)
同:
两假才假,一真即真;
异:
长路或(|),两侧都运算;
短路或(||),发现第一个是真,第二个就不运算;
取反(!)
异或(^)
不同为真,相同为假。
<<>>
意义:移动几位代表2的几次方,左移是乘右移是除。
补位:>>最高位是0,用0补,最高位是1,用1补。
>>>无论最高位是什么,都用0来补。
二进制表示
int i=5;
String b=(Integer.toBinaryString(i));
System.out.println(b);
变量
一个字节八位
整型
byte 1个字节
short 2个字节
int 4个字节
long 8个字节
浮点型
float 4个字节
double 8个字节
字符型
char java中采用unicode编码占用两个字节
布尔型
Boolean 0/1
类变量与实例变量
类变量随着类的消失而消失。
实例变量随着对象的消失而消失。
转义字符
\n 换行
\b 退格
\r Enter linux 中是\r windows是\n\r
\t table
常用类
switch语句
package hello;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner a= new Scanner(System.in);
int day=a.nextInt();
switch(day) {
case 1:
System.out.println("星期一");break;
case 2:
System.out.println("星期二");break;
case 3:
System.out.println("星期三");break;
case 4:
System.out.println("星期四");break;
case 5:
System.out.println("星期五");break;
case 6:
System.out.println("星期六");break;
case 7:
System.out.println("星期天");break;
}
}
}
数学函数的使用
package hello;
import java.util.Scanner;
import java.math.*;
public class HelloWorld {
public static void main(String[] args) {
double a=2,sum=0,t;
for(int i=0;i<10;i++)
{
t= Math.pow(a,i);
sum+=t;
}
System.out.println(sum);
}
}
随机数
(int) (Math.random() * 100)
数组初始化,不能定义维数
int[] a= new int[] {0,1,2,3,4};
选择排序
int [] a= new int []{1,0,2,3,4,5,6,7,8,9};
for(int j=0;j<a.length-1;j++)
{
for(int i=j+1;i<a.length;i++)
{
if(a[i]<a[j]) {
int t;
t=a[i];
a[i]=a[j];
a[j]=t;}
}
}
冒泡排序
int [] a= new int []{1,0,2,3,4,5,6,7,8,9};
for(int j=a.length;j>0;j--)
{
for(int i=0;i<j-1;i++)
{
if(a[i]>a[i+1]) {
int t;
t=a[i];
a[i]=a[i+1];
a[i+1]=t;}
}
}
数组复制
int [] a= new int []{1,0,2,3,4,5,6,7,8,9};
int [] b= Arrays.copyOfRange(a, 0, 4);
// copyOfRange(int[] original, int from, int to)
// 第一个参数表示源数组
// 第二个参数表示开始位置(取得到)
// 第三个参数表示结束位置(取不到)
转化为字符
int [] a= new int []{1,0,2,3,4,5,6,7,8,9};
String b= Arrays.toString(a);
System.out.println(b);
如果要打印一个数组的内容,就需要通过for循环来挨个遍历,逐一打印。
但是Arrays提供了一个toString()方法,直接把一个数组,转换为字符串,这样方便观察数组的内容
排序
int [] a= new int []{1,0,2,3,4,5,6,7,8,9};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
搜索
int [] a= new int []{1,0,2,3,4,5,6,7,8,9};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.binarySearch(a, 1));
从0开始,排过序之后的顺序
判断是否相同
int [] a= new int []{1,0,2,3,4,5,6,7,8,9};
int [] b= new int [] {1,1,2,3,4,5,6,7,8,9};
System.out.println(Arrays.equals(a,b));
判断是否相同,相同为true,不同为false
填充
int [] a= new int []{1,0,2,3,4,5,6,7,8,9};
Arrays.fill(a, 5);
System.out.println(Arrays.toString(a));
二维数组随机数排序
package hello;
import java.util.Arrays;
public class HelloWorld {
public static void main(String[] args) {
int [][] a=new int[5][8];
for(int i=0;i<a.length;i++) {
for(int j=0;j<a[i].length;j++) {
a[i][j]=(int)(Math.random()*100);
}
}
System.out.print("排序前:");
for(int[] k: a) {
System.out.print(Arrays.toString(k));
}
System.out.println(" ");
System.out.print("排序后");
for(int[] b :a) {
Arrays.sort(b);//注意是b,这个错误找了好久
System.out.print(Arrays.toString(b));
}
}
}
抽象类:
有抽象类不一定有抽象方法,但有抽象方法一定有抽象类。
抽象类可以定义一个抽象类的引用但不能定义抽象类的对象。
Final 修饰一个类,此类不能背继承。Final 修饰的方法不能被子类继承但是可以被重写。
进制转换
public class Main {
public static void toBin(int num){
StringBuffer sb = new StringBuffer();
while(num!=0){
sb.append(num%2);
num=num/2;
}System.out.println(sb.reverse());
}
public static void main(String[] args){
toBin(2);
}
}
第三章 java的基本程序设计结构
java注释: java注释分三种:
- // 注释内容(到本行末尾结束)
- /* 注释内容 */
- /** 注释内容*/ (可以生成文档)
定义和声明的区别
定义:int i = 10 ;
声明:extern int i ;
常量
final 等价于 const
nextline() 以行为单位输出
next()以空格为单位输出
输入
Scanner in = new Scanner(System.in);
String name = in.nextLine();
String age = in.next();
System.out.println(name);
System.out.println(age);
大数运算
BigInteger: 实现了不同的整数运算。
**BigDecimal:**实现了不同的浮点运算。