Java Notes

Terminal 中运行

public class HelloWorld {
    /* 第一个Java程序
     * 它将打印字符串 Hello World
     */
    public static void main(String []args) {
        System.out.println("Hello World"); // 打印 Hello World
    }
}
  • javac HelloWorld.java compile
  • java HelloWorld run
  • 所有的 Java 程序由 public static void main(String []args)

变量

内置数据类型

// int 
// SIZE and MAX_VALUE is the property of Integer Object 
Integer.SIZE; // 32
Integer.MAX_VALUE; 2^31-1 

常量

final float PI = 3.14;

引用类型

  • 对象、数组都是引用数据类型。
  • 所有引用类型的默认值都是null。

Java修饰符

像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

访问控制修饰符

  • private :类内部
  • default:同一包
  • protected: 同一包,以及所有子类(子类不一定是同一包)
  • public:所有类可见

访问控制和继承

请注意以下方法继承的规则:

  • 父类中声明为 public 的方法在子类中也必须为 public。
  • 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
  • 父类中声明为 private 的方法,不能够被继承。

非访问控制修饰符

  • static: 静态变量类的变量里说过了,静态方法:独立于对象;静态方法不能使用类的非静态变量。静态方法从参数列表(String args[])得到数据,然后计算这些数据。
  • final: final变量不能被修改;final方法可以被继承,不能被修改
  • abstract:abstract类不能实例化对象,abstract方法就是一个空的方法,需要子类来提供
  • synchronized:声明的方法同一时间只能被一个线程访问
  • 还有transient and volatile

运算符

位运算不是很熟,其他的略了

  • & and
  • | or
  • ^ 异或(不同才为1)
  • ~ 取反
  • << , >>左移和右移

类和对象 (重点)

类中的变量类型(区别)

表观区别

  • 方法中(包括constructor):局部变量
  • 方法外:成员变量(new一次实例化一次),类变量(必须有static)

其他区别

  • 局部变量:方法执行时候创建,完事了销毁; 没有默认值, 必须初始化; 栈上分配
  • 实例变量(成员变量): 实例化对象的时候确定实例变量;有默认值
  • 类变量(静态变量): 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝;静态变量在第一次被访问时创建,在程序结束时销毁;有默认值

封装 多态 继承 重载

几种常用的类

Number & Math 类

在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类
所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。

Java 1.5之后可以自动装箱 > https://droidyue.com/blog/2015/04/07/autoboxing-and-autounboxing-in-java/

  • 自动装箱时编译器调用valueOf()将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。
  • 自动装箱是将boolean值转换成Boolean对象,byte值转换成Byte对象,char转换成Character对象,float值转换成Float对象,int转换成Integer,long转换成Long,short转换成Short,自动拆箱则是相反的操作。
Math类
  • Math.sin()// 等各种三角函数;
  • 可以用在Number类型转换的(重要):
    • x.longValue(); // 以 long 形式返回指定的数值
    • x.toString();
    • Integer x =Integer.valueOf(9); //valueOf() 方法用于返回给定参数的原生 Number 对象值,参数可以是原生数据类型, String等。
    • x.equals(y); // 参数类型与数值都相等返回 True
  • Math.max(); Math.pow(x, n)/exp(); Math.ceil()/floor()/rint()/round();

Character 类

  • char的包装类是Character
  • 常用方法:isLetter()/isDigit()/isWhiteSpace()/isUpperCase/toUpperCase()

String and StringBuffer/StringBuilder

  • String 有一大堆构造方法:字符串,char数组,…
  • 常用方法:String str = "hello";
    • str.length(); //很傻逼的是数组用length,List用size()
    • str1.concat(str2); // 就不能直接加起来吗,非要搞个StringBuilder才能改变字符串
    • str.charAt(index); // 超级无语
    • str.subString(begin index, end index); // C++貌似是begin index和length
    • 其他的用到了再说
StringBuilder and StringBuffer
  • StringBuilder 速度快,但是不是线程安全的(不能同步访问)//为啥;要求线程安全时必须用StringBuffer
  • 常用方法:StringBuffer sb = new StringBuffer("hello");
    • sb.append("a");
    • sb. delete(int start, int end)
    • sb.insert(int offset, int i)
    • sb.replace(int start, int end, String str)
    • length(), charAt(), subString()是一样的

一些数据结构

Array

  • Java 语言中提供的数组是用来存储固定大小的同类型元素。
  • 可以用a[i] 来访问了
  • Arrays类,便捷操纵数组
    • Arrays.sort(a);
    • Arrays.equals(a1, a2)
    • Arrays.fill(a, 0);
import java.util.*;

int[] nums = new int[5]; // array size
int[] nums2 = {1,2,3,4};
int[] nums3 = new int[]{1,2,3,4};
System.out.println(Arrays.toString(nums2));
// or use for loop to print

Java Stream, I/O

  • java.io包
  • 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
  • Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。

Read from console

  • 把System.in包裹在BufferedReader对象中创建字符流 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  • 用reader() 方法包裹BufferedReader,字符串用readLine(),int read( ) throws IOException
// 说实话和cin cout比起来有一丢丢的麻烦

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("please input");
// 1. read a character
char c;
c = (char) br.read(); // 这里还要转换
System.out.println("c: " + c);
// 2. read a string
String str;
str = br.readLine();
System.out.println("str: " + str);

Write to console

System.out.write(); // similar to println()
what is the difference??

File

  • FileInputStream
  • FileOutputStream
// 输入
// 或 InputStream f = new FileInputStream("C:/java/hello");
File f = new File("C:/java/hello");
InputStream out = new FileInputStream(f);

// 输出
// 或 OutputStream f = new FileOutputStream("C:/java/hello")
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

菜鸟上的例子,还蛮好的

//文件名 :fileStreamTest2.java
import java.io.*;
 
public class fileStreamTest2 {
    public static void main(String[] args) throws IOException {
 
        File f = new File("a.txt");
        FileOutputStream fop = new FileOutputStream(f);
        // 构建FileOutputStream对象,文件不存在会自动新建
 
        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
 
        writer.append("中文输入");
        // 写入到缓冲区
 
        writer.append("\r\n");
        // 换行
 
        writer.append("English");
        // 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
 
        writer.close();
        // 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
 
        fop.close();
        // 关闭输出流,释放系统资源
 
        FileInputStream fip = new FileInputStream(f);
        // 构建FileInputStream对象
 
        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
        // 构建InputStreamReader对象,编码与写入相同
 
        StringBuffer sb = new StringBuffer();
        while (reader.ready()) {
            sb.append((char) reader.read());
            // 转成char加到StringBuffer对象中
            // 有点像 while(intput >> line)
        }
        System.out.println(sb.toString());
        reader.close();
        // 关闭读取流
 
        fip.close();
        // 关闭输入流,释放系统资源
    }
}

异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常
Java 程序通常不捕获错误。错误一般发生在严重故障时

  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
    异常种类

捕获异常

try {
   // 程序代码
} catch(ExceptionName e1) {
   //Catch 块
} catch() {

} finally {
	// 无论是否发生异常,finally 代码块中的代码总会被执行。
	// 在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
}

throws

方法用throws关键字来声名
IO中就用到了

import java.io.*;
public class className
{
  public void deposit(double amount) throws RemoteException
  {
    // Method implementation
    throw new RemoteException();
  }
  //Remainder of class definition
}

Collections

Collecions
List/ ArrayList
Map/HashMap/HashTable
Set/HashSet
Queue/ Stack
LinkedList

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值