java初学部分笔记

一、java的数据类型

基本类型引用类型
byte-1个字节、short-2个字节、int-4个字节、long-8个字节
float-4个字节、double-8个字节接口
char-2个字节数组
boolean-1位
  • 注意:
  1. java是强类型语言,其中float和long类型的变量在声明时,后面应加上F和L
  2. 位:计算机内部数据存储的最小单位;字节:数据处理的基本单位
  3. 1B(字节) = 8 bit(位)
  4. 所有字符的本质是数字
  5. Unicode编码表:u0000-uffff,这里是十六进制表示,如\u0061表示的是a(A65,a97)
  6. 由于浮点数类型存在精度误差,最好避免使用浮点数进行比较
  7. 二进制0b,八进制0,十六进制0x

二、类型转换

  1. 自动类型转换:低 -> 高
    byte,short,char->int->long->float->double
  2. 强制类型转换:高 -> 低 (类型)变量名

注意:
1. 不能对布尔值进行转化
2. 不能把对象类型转换为不相关的类型
3. 转换的时候可能出现内存溢出或者精度问题
4. JDK新特性,数字之间可以使用_下划线进行分割,不影响原本的数字

三、变量的默认值

  1. 实例变量:从属于对象,若不进行初始化,则这个类型的默认值为0
  2. 布尔值:默认为false
  3. 除了基本类型,其他的都是null
  4. char的默认值是u0000

四、运算符

  1. byte,char,short用运算符运算后自动转型为int类型

五、javaDoc文档的生成

  1. javadoc是用来生成自己的api文档
  2. 参数信息:
    @author作者名
    @version版本号
    @since指明需要最早使用的jdk版本
    @param参数名
    @return返回值情况
    @throws异常抛出情况
  3. IDEA生产Javadoc文档
  4. 命令行生成

    以HelloWorld.java文件为例,生成其对应的Javadoc
    javac HelloWorld.java 编译文件
    java HelloWorld 执行生成的.class文件
    javac -encoding UTF-8 -charset UTF-8 HelloWord.java 生成相应的Javadoc文件(目录下的index.html)

六、Scanner对象

import java.util.Scanner;
public class Test{
	public static void main(String[] args) {
		Scanner scanner = new Scanner(Syatem.in);
		if(scanner.hasNextLine) {
			String str = scanner.nextLine();
			System.out.println(str);
		}
		scanner.close();
	}
}
  1. next()和nextLine()的区别:
    输入优先字符后会将其后面输入的空白作为分隔符或者结束符,即next()不能得到带有空格的字符串
  2. nextLine()是以Enter作为结束符,可以获得空白,返回的是输入回车之前的所有字符

七、增强for循环

  1. 增强for循环主要是用来遍历数组和一些对象的,java5之后才引用的
  2. 格式:
    for(声明语句:表达式){
    //代码句子
    }
  3. java中的标签:对于java中来说,唯一用到标签的地方是在循环语句之前
    用法:当在循环中嵌套另一个循环时,由于break和continue关键字通常只中断当前的循环,但是若随着标签一同使用,它们就会中断到存在标签的地方
    举例:求1~100之间的质数
label:for(int i = 1; i < 100; i++){
		for(int j = 2; j < i/2; j++) {
			if(i % j == 0){
				continue label;
			}
		}
	}

八、打印三角形

/*
     *
    ***
   *****
  *******
 *********
*/
 for (int i = 1; i <= 5; i++) {
    for(int j = 5; j >= i; j--) {
       System.out.print(" ");
        }
     //先打印出空白的倒三角部分
    for(int j = 1; j <= i; j++) {
       System.out.print("*");
        }
     //打印出三角形的一半
    for(int j = 1; j < i; j++) {
       System.out.print("*");
        }
       System.out.println();
    }

九、方法重载

重载的规则:

  1. 方法名称必须相同
  2. 参数列表必须不同,如:个数、类型不同等
  3. 方法的返回类型可以相同也可以不相同
  4. 当只有返回类型不同时,不能成为方法的重载

十、命令行传参

  1. 当一个程序在运行时,给它传递参数,这需要利用命令行给main()函数实现
  2. javac 文件名.java,编译后生成一个.class文件,然后通过java 包名.文件名(编译生成的那个文件) 参数\
  3. 这些参数即保存在main()方法的String[] args参数中
  4. 注意:运行一个.class文件 ,需要找到包的路径之上进行运行,否则报错

十一、可变参数

  1. 声明:指定参数类型加省略号(…)
  2. 一个方法只能指定一个可变参数,并且它必须是方法的最后一个参数

十二、数组

  1. 数组的声明,例:
    int[] array = new int[10];
    即声明了一个包含10个int类型的数组对象
  2. 静态初始化
    int[] arry = {1,2,3,4,5}
    动态初始化,默认有初始值
    int[] array = new int[10];
    array[0] = 10;
    这里其余未进行赋值的元素,有默认初始值0
  3. 数组本身就是对象,java中的对象是在堆中的
    int[] array——栈中
    array = new int[10]——堆中
  4. 数组中的元素可以是任何数据类型,包括基本类型和引用类型

十三、数组中常用的方法

  1. 打印数组:Arrays.toString(数组对象)
  2. 数组排序(升序):Arrays.sort(数组对象)
  3. 给数组赋值:
    Arrays.fill(数组,值)表示将数组中的全部值全部替换
    Arrays.fill(数组,startindex,fromindex,值)表示将指定区间内的元素值进行替换(注意左闭有开)

十四、构造器

  1. java中的构造器必须满足:
    和类名相同
    没有返回值,也不能为void
  2. 一旦使用了有参构造,那么无参构造必须显示定义,即在有参构造的情况下,无参构造必须存在
  3. IDEA中的快捷键:alt+insert选择constructor,则会根据已经存在的属性,自动生成有参构造函数
  4. 怎么自动生成无参构造函数呢?重复上述操作,但是在选择constructor后再选择selectNone,此时生成无参构造函数
  5. get和set方法快捷设置也可使用上面的快捷键,或者直接右键选择gengerate

十五、继承

  1. 快捷键Ctrl+H:打开继承树
  2. 所有的类,都默认直接或者间接继承Object类
  3. 继承的本质是对某一批类的抽象
  4. java中只有单继承,没有多继承
  5. 当子类继承父类中的属性、方法时,对于父类中使用public修饰的方法,在子类中可以使用super.函数()来进行调用
  6. 在子类的构造器中,默认继承了父类中的构造器,当构造一个子类中的对象时,会先调用父类中的构造器,然后再调用子类自己的
public class student extends Person{
	public student() {
		super();//隐藏代码,调用了父类中的无参构造函数
		//并且该代码如果显示写出,应该放在子类构造器中的第一行
	}
}
  1. 若父类中只有含参构造器,没有写无参构造器的话,此时子类会报错,要想子类中不报错,就得显示调用父类含参构造器
  2. super和this不能同时调用构造方法

十六、方法的重写

  1. 静态方法:方法的调用只和左边定义的数据类型有关
  2. 非静态的方法,可以选择重写
//父类
public class parent {
	public void test() {
		System.out.println("parent=>test()");
	}
}
//子类
public class child extends parent{
	public void test() {
		System.out.println("child=>test()");
	}
}
//调用
child c = new child();
c.test();
//父类的引用指向子类
parent p = new child();
//子类重写了父类中的方法
p.test();

//输出结果
//child=>test()
//child=>test()
  • **注意:**当test()方法是static类型时,则不是方法的重写了,此时输出的结果是看左边声明的对象类型决定

十七、重写和重载的区别

  1. 重载是方法的参数个数或者参数类型不同,是发生在同一个类中的
  2. 重写是子类重写父类中的方法,是发生在子类和父类之间的
  3. 重写:

    需要有继承关系,子类重写父类中的方法
    方法名必须相同
    参数列表必须相同
    修饰符:范围可以扩大但是不可以缩小:public>protected>default>private
    抛出异常:范围可以缩小,但是不能扩大:classNotFoundException->Exception
    子类中的方法和父类必须一致,方法体不同

十八、多态

  1. 同一方法可以根据发送对象的不同而采用多种不同的行为方式
  2. 一个对象的实际类型时确定的,但是可以指向的引用类型是不确定的
  3. 子类能调用的方法都是自己的或者是继承父类的,父类可以指向子类,但是不能调用子类独有的方法,即对象能执行哪些方法,主要看对象左边的类型,和右边的关系不大
  4. 多态分为运行时多态(方法重写)和编译时多态(方法重载)

十九、类型转换

  1. instanceof关键字,如果能匹配,则可以进行类型之间的转换
  2. 向上转型:子转父,直接转,可能会丢失子类中原本可直接调用的特有方法
  3. 向下转型:父转子,强制转换,丢失父类被子类所重写掉的方法
  4. 目的:方便方法的调用,减少重复的代码

二十、静态方法

  1. 静态方法和类一同加载,因此静态方法不能调用非静态方法
  2. 静态方法可以调用静态方法
  3. 非静态方法可以调用静态方法
  4. 执行顺序:静态代码块->匿名代码块->构造器
  5. final修饰的类不能被继承
  6. 静态导入包
//如何直接使用random(),而不是通过Math.random()
import static java.lang.Math.random;
//静态导入包后就可以直接使用
System.out.println(random());

二十一、抽象类

  1. 使用abstract修饰符修饰的类
  2. 抽象方法:使用abstract修饰,只有方法的名字,没有方法的实现
  3. 抽象类的所有方法必须要由子类全部实现
  4. 由于在java中继承是单继承的,因此出现了接口,接口可以实现多继承
  5. 抽象不能new,它相当于一个约束,只能由子类来实现它
  6. 抽象类中可以有普通的方法,但是一旦类中包含抽象方法,那么它必须要是抽象类

二十二、接口

  1. 接口和抽象类的区别:在抽象类中具体实现和规范(抽象方法)都有,但是在接口中只有规范,自己无法书写方法
  2. 定义关键字:interface
  3. 接口中所有的定义其实都是抽象的,即public abstract
  4. 类实现接口的关键字:implements
  5. 实现接口的类,必须要重写接口中的方法,快捷键:鼠标放置在红色报错地区,alt+enter
  6. 利用接口实现多继承,一次继承多个父类,父类之间用逗号隔开
  7. 如果在接口中定义属性,那么默认是常量,即public static final
  8. 接口不能实例化对象,因为接口中没有构造方法

二十三、内部类

public class Outer{
	public void out() {
		System.out.println("这是外部类的方法");
	}
	public class Inner{
		public void in() {
			System.out.println("这是内部类的方法");
		}
	}
}
//如何通过外部类来实例化内部类
Outer out = new Outer();
Outer.Inner in = Outer.new Inner();
  1. 内部类能访问外部类中的私有属性
  2. 若内部类声明为静态内部类,则不能再访问父类中的属性,除非这些属性也是静态的(静态方法和属性先加载)
  3. 一个java类中可以有多个class类,但是只能有一个public class
  4. 局部内部类:在类中的方法中定义的类
public class Outer {
	public void method() {
		class Inner{
		//局部内部类
		}
	}
}

二十四、异常

  1. java中定义了一个基类java.lang.Throwable作为所有异常的超类
  2. java中的异常类分为两大类,错误Error和异常Exception,其中Error分为AWT错误和JVM错误(StackOutFlow、OutOfMemory)
  3. 程序中异常的捕获处理使用try、catch、finally
  4. 其中try区域是用于监测可能出现异常问题的代码,而catch区域则是用来处理发生异常时的情况,finally部分不管程序是否出现异常都会执行,一般处理善后工作,比如程序在处理一些资源或者IO流时,都需要进行关闭操作等
  5. 可以一次使用多个catch捕获异常,但是这些异常类必须从小到大
try {
	System.out.println(1/0);
}catch(Error e) {
	
}catch (Exception e) {

}catch(Throwable e) {

}
  1. 快捷键:选中需要进行监测的代码,Ctrl+alt+T,然后即可选择生成代码的类型
  2. throw: 主动抛出异常
public void test(int a) {
  if(a == 0) {
  	throw new ArithmeticException();
  	//主动抛出的异常,一般在方法中使用
  	}
 }
  1. throws:方法抛出异常
public class Test{
	public static void main(String[] args) {
		try{
			new Test().test(0);
		}catch(ArithmeticException e) {
			e.printStackTrace();
		}
	}
	//假设这个方法上处理不了异常,方法上抛出异常
	public void  test(int a) throws ArithmeticException{
	     if(a == 0) {
 			throw new ArithmeticException();
	}
}
  1. 注意:在多重catch块后面,应该加上一个大类Exception,来处理肯能会被遗漏的一些小的异常

二十五、自定义异常

  1. 声明一个类,继承Exception
//自定义的异常类
public class MyException extends Exception {
	private int detail;
	public MyException(int detail) {
		this.detail = detail;
	}
	//toString:异常信息的打印
	public String toString() {
		return "MyException{" + detail + "}";
	}
}
public class Test{
	//可能会存在异常的方法
	static void test(int a) throws MyException {
	System.out.println("传递的参数为:" + a);
	if(a > 10) {
			throw new MyException(a);
		}
	}
	public static void main(String[] args) {
		try{
			test(11);
		}catch(MyException e) {
			System.out.println("MyException=>" + e);
		}
	}
}
  1. 方法中throws的快捷键:alt+Enter

二十六、jdk和jre

  1. jdk:开发者工具包
  2. jre:运行时环境

二十七、编译型语言和解释型语言

  1. javac 生成.class文件
  2. 编译型语言:程序需要编译后运行
  3. 解释型语言:边读代码边解释
  4. java是编译型+解释型语言

二十八、包机制

  1. 域名倒写
  2. 防止命名冲突
  3. package要写在第一行,就算有import,package也要写在import的前面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值