Java学习笔记(一)

Java学习笔记

  1. Java的工作方式
    它的目标是让你写一个应用程序能够在任何设备上执行。
    编写源代码文件 -> 用编译器运行源代码,编译器会检查错误,如果有错误就要改正才能产生正确的输出。 -> 编译器会生产出字节码。任何支持Java的装置都能够把它转译成可执行的内容。编译后的字节码与平台无关 -> Java虚拟机(JVM)可以读取和执行字节码。

  2. 语法

    public class FirstSample {
    	public static void main(String[] args) {
    		System.out.println("we will not use 'hello world!'");
    	}
    }
    

    public成为访问修饰符,这些修饰符用于控制程序的其他部分对这段代码的访问级别。
    java中定义类名规则很宽松:名字必须以字母开头,后面可以跟字母和数字的任意组合。
    类名为大驼峰
    每个Java应用程序都必须有一个main方法:

    public class ClassName {
    	public static void main(String[] args) {
    		//program statements
    	}
    }
    

    Java中的的所有函数都属于某个类的方法(标准术语将其称为方法,而不是成员函数)。
    Java中每个句子必须用分号结束。
    Java使用的调用方法的通用语法:object.method(parameters)
    与大多数程序语言一样,Java中的注释也不会出现在可执行的程序中。

  3. 数据类型
    Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中一共有8种基本类型(primitive type),其中有4中整型,2中浮点类型,1中用于表示unicode编码的字符单元的字符类型char和一种用于表示真值的boolean类型。
    注释:Java中有一个能够表示任意精度的算术包,通常称为“大数值”(big number)。虽然被称为大数值,但它并不是一种新的Java类型,而是一个Java对象。
    (1)整型
    整型用于表示没有小数部分的数值,它允许是负数。Java提供了4中整型

类型存储需求(大小)取值范围
int4字节-2^31 ~ 2^31-1
short2字节-2^7 ~ 2^7-1
long8字节-2^64 ~ 2^63-1
byte1字节-2^7 ~ 2^7-1

Java中,整型的范围与运行Java代码的平台无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中不同操作系统之间进行移植给程序带来的诸多问题。由于Java程序必须保证在所有机器上都能够得到相同的运行结果,所以各种数据类型的取值范围必须固定。
注意:Java没有任何无符号形式的intlogshortbyte类型。
(2)浮点型

类型存储需求取值范围
float4字节有效位数为6~7位
double8字节有效为15位

(3)char类型
char类型原本表示单个字符。不过,现在情况已经有所变化。有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值。
(4)boolean类型
boolean类型有两个值:falsetrue。整型值和布尔值之间不能相互转换。

  1. 变量
    Java中,每个变量都有一个类型。在声明变量时,变量的类型位于变量名之前。

    double salary;
    int vacationDays;
    long earthPopulation;
    boolean done;
    
  2. 常量
    Java中,利用关键字final指示常量。例如:

    public class Constants {
    	public static void main(String[] args) {
    		final double CM_PER_INCH = 2.54;
    		double paperWidth = 8.5;
    		double paperHeight = 11;
    		System.out.println("Paper size in centimeters:" + paperWidth * CM_PER_INCH + "by" + paperHeight * CM_PER_INCH);
    	}
    }
    

    关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能再更改了。习惯上,常量名使用全大写。

  3. 数学函数与常量
    Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。

    double x = 4;
    double y = Math.sqrt(x);
    System.out.println(y);
    
  4. 强制类型转换
    double->int

    double x = 9.997;
    int nx = (int)x;//10
    

    如果想对浮点进行舍入运算以便得到最接近的整数,那就需要使用Math.round方法:

    double x = 9.997;
    int nx = (int)Math.round(x);
    
  5. 枚举类型

    枚举类型的变量只能存储这个类型声明中给定的某个值或者nullnull表示这个变量没有设置任何值

    enum Size {
    	SMALL,
    	MEDIUM,
    	LARGE,
    	EXTRA_LARGE
    };
    Size s = Size.MEDIUM;
    
  6. 字符串
    从概念上讲,Java字符串就是Unicode字符串序列。每个用双引号括起来的字符串都是String类的一个实例:

    Stirng e = "";an empty string
    String greeting = "hello";
    

    (1)子串

    String greenting = "hello";
    String s = greeting.substring(0, 3);
    s.equals("hel");//true
    s == "hel";//false
    

    Java中只有字符串常量是共享的,而+或者substring等操作产生的结果并不是共享的。
    个人观点:Java==用于基本类型比较的时候,是进行值比较,用于引用类型比较时是内存地址比较(判断是否是同一个对象)
    (2)码点和代码单元
    代码单元是指一个char类型的字符,码点是只一个实际的字符(该代码单元对应的编码)。例:a对应的代码单元a,对应的码点97

    String s = "abc 🐂";
    System.out.println(s.length);//6
    System.out.println(s.codePointCount());//5
    

    (3)构建字符串
    有些时候,需要由较短的字符串构建字符串,例如,按键或来自文件中的单词。采用字符串连接的方式效率比较低。每次连接字符串时,都会构建一个新的String对象,既耗时又浪费空间。使用StringBuilder类就可以避免这个问题的发生。

    StringBuilder builder = new StringBuilder();
    builder.append(ch);//追加字符
    builder.append(str);//追加字符串
    String finalString = builder.toString();
    
  7. 输入输出
    (1)输入

    Scanner in = new Scanner(System.in);
    System.out.print("What is your name?");
    String name = innextLine();//整行
    String name = in.next();//单词(空格为分隔符)
    //nextInt() 读取一个整数 nextDouble() 读取一个浮点
    

    (2)格式化输出

转换符类型举例
d十进制整数159
x十六进制整数9f
o八进制整数237
f定点浮点数15.9
e指数浮点数1.59e+01
g通用浮点数
a十六进制浮点数0x1.ffccdp3
s字符串Hello
c字符H
b布尔True
h散列码42628b2
tx或Tx日期时间(T强制大写)已经过世,应当改为使用java.time类
%百分号%
n与平台有关的行分隔符

可以使用静态的String.format方法创建一个格式化的字符串:String message = String.format("hello, %s. age:%d", name, age);
打印时间:
以t开头

	System.out.printf("%tc", new Date());

(3)文件输入与输出
想要对文件进行读取,就需要一个用File对象构造一个Scanner对象

	Scanner in = new Scanner(Path.get("myfile.txt"), "UTF-8");

(4)大数值
如果基本的整型和浮点数精度都不能够满足需求,那么可以使用java.math包中的两个有用的类:BigIntegerBigDecimal。这个两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。
使用静态方法valueOf()方法可以将普通的数值转换为大数值:

	BigInteger a = BigInteger.valueOf(100);	

很遗憾的是,不能使用算数运算符处理大数值。而需要使用大数值类中的addmultiply方法

	BigInteger c = a.add(b);//c = a + c;
	BigInteger d = c.multiply(b.add(Biginteger.valueOf(2)));//d = c * (b + 2);

(5)数组

	int[] a = new int[100];//创建长度为100的整型数组	

创建一个数字数组时,所有元素都初始化为0.boolean数组的元素会初始化为false。对象数组的元素则初始化为一个特殊值null,这表示这些元素(还)为存放任何对象。

	String[] names = new String[10];

创建一个包含10个字符串的数组,所有字符串都是null。如果希望这个数组包含空串,可以为元素指定空串:

	for(int i = 0; i < 10; i ++) names[i] = "";

一旦创建了数组,就不能改变它的大小(尽管可以改变每一个数组元素)。如果在运行过程中拓展数组大小,就应该使用另一种数据结构–数组列表(array list)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值