Java学习笔记(一)

Java开发环境

  • 编译期:Java经过编译,生成.class字节码文件。
  • 运行期:JVM加载.class文件并运行。
  • JVM:Java虚拟机,加载并运行.class
  • JRE: Java运行时环境,除了包含JVM以外还包含了运行Java程序所必须的环境。
  • JDK: Java开发工具包。除了包含JRE以外,还包含了开发Java程序所必须的命令工具。
    基本数据类型
类型 字节空间
boolean 1字节(8位)
char 2字节(16位)
int 4字节(32位)
float 4字节(32位)
double 8字节(64位)
long 8字节(64位)
举例float:
-2^31 ~ 2^31 - 1
##### 舍入误差
Java中默认的浮点型位Double。如果不加f而使用float会报错误:
```java
float price2 = 2.5f;
```
2进制中无法精确表示1/10,就像10进制中无法精确表示1/3一样。

所以2进制表示10进制时会有舍入误差,对于一些需要精确运算的场合会导致代码的缺陷:

double price = 3.0;
double price3 = 2.9;
System.out.println(price - price3);
//0.10000000000000009
输入函数
//导入
import java.util.Scanner;

Scanner scan = new Scanner(System.in);
int age = scan.nextInt();
System.out.println(age);

数组

数组的定义
        //数组的定义
        int[] array1 = new int[4];
        array1[0] = 10;
        array1[1] = 20;
        array1[2] = 30;
        int[] array2 = {1,4,7};
        int[] array3 = new int[] {2,3,8,9};
        System.out.println(array3.length);
        for (int i = 0; i < array1.length; i++) {
            System.out.println("_____" + array1[i]);
        }
        System.out.println(array3);
        int[] array4 = new int[10];
        for (int i = 0; i < array4.length; i++) {
            array4[i] = (int) (Math.random() * 100);
            System.out.println("_____" + array4[i]);
        }
        int[] arr1 = {10,123,34,255,167};
        int[] arr2 = new int[5];
        //复制数组元素:
        //原数组 -- 起始下标--目的数组--起始下标---复制原数组的元素长度
        System.arraycopy(arr1, 1, arr2, 0, 4);
        //复制数组元素:
        //需要导入import java.util.Arrays;
        //原数组---目标数组初始化的长度
        int[] arr3 = Arrays.copyOf(arr1, 10);
数组排序
        //对数组进行排序
        //对数组进行升序排序
        Arrays.sort(arr3);
        //对arr1进行冒泡排序
        //冒泡排序:Bubble sort
        for (int i = 0; i < arr1.length - 1;i++) {//5个数需要比较四轮
            for (int j = 0; j< arr1.length - 1 - i; j++) {
                if(arr1[i] > arr1[i + 1]) {
                    int temp = arr1[i];
                    arr1[i] = arr1[i + 1];
                    arr1[i + 1] = temp;
                }
            }
        }
        for (int i = 0; i < arr1.length; i++) {
            System.out.println("冒泡排序:" + arr1[i]);
        }
        //判断是否为质数
        int  tempInt = 37;
        boolean isPrimeNumber = true;
        //简单判断就是 i <= tempInt / 2;
        //此处用的是平方根
        for(int i = 0;i <= Math.sqrt(tempInt); i++) {
            if(tempInt % i == 0) {
                isPrimeNumber = false;
                break;
            }
        }
        if(isPrimeNumber) {  
            System.out.println("是质数");
        }else {
            System.out.println("不是质数");
        }

Java的继承


public class OverloadLearn {

    public static void main(String[] args) {
        Person people = new Person();
        people.logUserInfo(); //父类的调用
        Student aStudent = new Student();
        aStudent.logUserInfo();//子类的调用
        aStudent.logFinal();

        //父类的指针指向子类的对象(多态)向上造型
        Person aPeople = new Student();
        aPeople.logUserInfo();//子类的调用    
    }
}
class Person {
    int age;
    String name;
    void logUserInfo() {
        System.out.println("父类的调用");
    }
}
class Student extends Person {
    String school;
    //被static final修饰的为常量,声明即需要初始化,不能被改变
    static final String address = "中华人民共和国";
     void logUserInfo() {
//         super.logUserInfo();
        System.out.println("子类的调用");
    }
     void logFinal() {
         System.out.println(address);
     }
}
抽象类的继承
//有抽象方法,必须要声明为抽象类。并且抽象类不能够被实例化
//抽象类就是被用来继承的。
abstract class Shape {
    double c;
    abstract double area();//抽象方法
}
//必须实现父类的抽象方法
class Square extends Shape {
    double area() {
        System.out.println("这是子类实现的一个抽象方法");
        return 56.6;
    }
}
接口的定义和实现

定义接口,继承抽象类:

//定义接口
interface MyInterfaceOne {
    public static final double PI = 3.1415;
    int number = 25;//接口中默认为 public static final
    public abstract void showLog();//抽象方法
    void showMyLog();//默认就是 public abstract
    //error:常量必须要初始化
//    int a ;
}
interface MyInterfaceSecond {
    int age = 24;
    void showMySecondLog();
}
abstract class MyAbstractClass {
    abstract void showMyAbstractMethod();
}
//定义的类需要实现所声明的接口的方法
//接口和类是并列的关系
//接口也是可以继承的,类实现MyInterfaceThree的方法时,也需要实现MyInterfaceSecond接口的方法
//interface MyInterfaceThree extends MyInterfaceSecond {
//    
//}
class InterfaceClass extends MyAbstractClass implements MyInterfaceOne,MyInterfaceSecond{
    //继承抽象类的方法(必须实现)
    void showMyAbstractMethod() {
        System.out.println("_____继承抽象类的方法");
    }
    //注意:必须要加public(必须要实现)
    public void showLog() {
        System.out.println("这是showLog方法");
    }
    public void showMyLog() {
        System.out.println("这是showMyLog方法");
    }
    public void showMySecondLog() {
        System.out.println("这是showMySecondLog方法");
    }
}

实现:

InterfaceClass myClass = new InterfaceClass();
myClass.showMyAbstractMethod();
myClass.showLog();
myClass.showMyLog();
myClass.showMySecondLog();
内部类的定义
//内部类和外部类
class Mather {//外部类
    private String Name;
    Baby createBaby() {
        return new Baby();
    }
    class Baby {//内部类
        public void showMatherName() {
            System.out.println(Name);
            System.out.println(Mather.this.Name);
//            System.out.println(this.Name);error 
        }
    }
}
    public static void main(String[] args) {
        Mather myMather = new Mather();
//        Baby ba = new Baby();error : 内部类不能在外部实现
    }
匿名内部类
    public static void main(String[] args) {
        int number = 44;
        //error: 接口不能实例化
//        MyInterface interface = new MyInterface();Error
        //匿名类的定义和实现
        MyInterface myInterf = new MyInterface(){
            public void show() {
                System.out.println("调用了show方法");
            }
            //error:在MyInterface中未定义,是不允许新添加方法的。
//            public void myShow() {
//                System.out.println("调用了myShow方法");
//            }
            public void showNumber() {
                System.out.println(number);
            }
        };
        myInterf.show();
        myInterf.showNumber();
//        myInterf.myShow();error 
}
interface MyInterface {    
    public void show();
    public void showNumber();
}
}

字符串的操作

public static void main(String[] args) {
        String str = "Hello world";
        // 没有则返回-1
        int index = str.indexOf("w");
        System.out.println("_____" + index);
        // 重载方法从指定的位置查找
        int index1 = str.indexOf("w", 3);
        System.out.println("_____" + index1);
        String str2 = "0123456789";
        // 字符串的截取
        // 从index3 到index5(不包括5)
        String sub = str2.substring(3, 5);
        System.out.println("_____" + sub);// 34
        // 从index4开始到结束
        sub = str2.substring(4);
        System.out.println("_____" + sub);// 456789
        int indexOfNumber = str2.indexOf("3");
        System.out.println("indexOfNumber" + indexOfNumber);//
        String myUrl = "http://www.baidu.com";
        if (myUrl.startsWith("http")) {
            System.out.println("http开头");
            int start = myUrl.indexOf(".") + 1;
            int end = myUrl.indexOf(".", start);
            String subStr = myUrl.substring(start, end);
            System.out.println("=====" + subStr);// baidu
        } else {

        }
        // 获取inex为4的字符
        char myChar = str2.charAt(4);
        System.out.println("=====" + myChar);// 4

        String info = "上海自来水来自海上";
        boolean isTrue = true;
        // 判断是否为回文
        for (int i = 0; i < info.length(); i++) {
            if (info.charAt(i) != info.charAt(info.length() - 1 - i)) {
                isTrue = false;
                break;
            }
        }
        if (isTrue) {
            System.out.println("是回文");
        } else {
            System.out.println("不是回文");
        }

        // 改变大小写
        String str3 = "Hello World 我爱Java";
        String upperStr = str3.toUpperCase();
        System.out.println(upperStr);// HELLO WORLD 我爱JAVA
        String lowerStr = str3.toLowerCase();
        System.out.println(lowerStr);// hello world 我爱java

        // 数字转字符串
        int a = 1;
        double b = 2.2;
        String StrA = String.valueOf(a);
        String StrB = String.valueOf(b);
        System.out.println(StrA);//
        System.out.println(StrB);// 2.2

        String tempStr = "中华人民共和国";
        // 可变字符串
        //StringBuffer:考虑了线程安全 StringBuilder没有
//        StringBuffer strBuffer = new StringBuffer(null);
        StringBuilder strBuilder = new StringBuilder(tempStr);
        System.out.println(strBuilder);
        // 初始化一个空的可变字符串
        StringBuilder strNull = new StringBuilder();
        System.out.println(strNull);
        // 可变字符串转换为不可变字符串
        String unStringBuilderStr = strBuilder.toString();
        System.out.println(unStringBuilderStr);

        // 可变字符串的拼接(在末尾追加)
        strBuilder.append("万岁!!!");//中华人民共和国万岁!!!
        System.out.println(strBuilder);
        //可变字符串的替换
        strBuilder.replace(0, 7, "世界人民大团结");
        System.out.println(strBuilder);//世界人民大团结万岁!!!
        //删除指定范围的字符串(含头不含尾)
        strBuilder.delete(9, 11);
        System.out.println(strBuilder);//世界人民大团结万岁!
        // 可变字符串的插入(在前边插入)
        strBuilder.insert(0, "中华人民共和国万岁!");
        System.out.println(strBuilder);//中华人民共和国万岁!世界人民大团结万岁!
        //翻转字符串
        strBuilder.reverse();
        System.out.println(strBuilder);//!岁万结团大民人界世!岁万国和共民人华中
    }

   转载规则


《Java学习笔记(一)》 刘星星 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
iOS中的UITextField使用总结 iOS中的UITextField使用总结
1、基本设置键盘类型 要显示中文,还得设置info.plist中Localization native development region 为 cn UITextField *textF = [[UITextField allo
2017-07-05
下一篇 
Git系统总结学习(三) Git系统总结学习(三)
Git 分支我们知道,Git 保存的不是文件差异或者变化量,而只是一系列文件快照。 在 Git 中提交时,会保存一个提交(commit)对象,它包含一个指向暂存内容快照的指针,作者和相关附 属信息,以及一定数量(也可能没有)指向该提交
2017-06-06
  目录