Java基础语法查漏补缺
Java基础语法查漏补缺
注释
1.单行注释:
//
2.多行注释:以/*开头,以*/结尾
/*
*内容
*/
3.文档注释:以/**开头,以*/结尾
/**
* @author niyun
* @date 2021/3/17 16:40
*/
类型转换

-
byte--short--char-->int-->long-->float-->double
-
float类型可能在输出存在bug
-
强制转换注意精度/溢出问题
-
JDK7新特性,数字之间可以用下划线分割
public class HelloWorld {
public static void main(String[] args) {
int money = 10_0000_0000;
System.out.println(money);
}
}
输出:1000000000
变量
-
局部变量必须声明和初始化值
-
实例变量:从属于对象;如果不进行初始化,默认int 0/String null,boolean false;
-
变量名前面修饰符不分先后顺序static final double == final static double
运算符
-
short+byte结果为int类型
-
幂运算用工具类
Math.pow(2,3)//2的3次方
Scanner
- 使用hasNext方式接收和使用hasNextLine方式接收:
使用hasNext方式接收和使用hasNextLine方式接收
- hasNext方式:
public class HelloWorld {
public static void main(String[] args) {
//alt+shift+L快捷生成对象前面的
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
if(scanner.hasNext()){
String str = new String();
str = scanner.next();
System.out.println(str);
}
scanner.close();
}
}
输入:hello world!
输出:hello
- hasNextLine方式:
public class Scannner {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
if(scanner.hasNextLine()){
String str = new String();
str = scanner.nextLine();
System.out.println(str);
}
scanner.close();
}
}
输入:hello world!
输出:hello world!
Switch
Java文件代码:
package com.yunni.struct;
/**
* @author niyun
* @date 2021/3/6 17:46
*/
import java.time.Duration;
import java.time.LocalTime;
public class SwitchDemo01 {
public static void main(String[] args) {
String name = "niyun";
switch (name){
case "niyun":
System.out.println("倪运");
break;
case "zhangsan":
System.out.println("张三");
break;
default:
System.out.println("error!");
}
}
}
IDEA反编译class文件后的代码:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.yunni.struct;
public class SwitchDemo01 {
public SwitchDemo01() {
}
public static void main(String[] args) {
String name = "niyun";
byte var3 = -1;
switch(name.hashCode()) {
case -1432604556:
if (name.equals("zhangsan")) {
var3 = 1;
}
break;
case 104835383:
if (name.equals("niyun")) {
var3 = 0;
}
}
switch(var3) {
case 0:
System.out.println("倪运");
break;
case 1:
System.out.println("张三");
break;
default:
System.out.println("error!");
}
}
}
For循环
- 100.for快捷生成for循环(fori也可以自动生成for循环)
- outer标签(了解):
//打印101--150之间的质数
public class OuterDemo {
public static void main(String[] args) {
//不建议使用outer标签
outer:
for (int i = 101; i < 150; i++) {
for (int j = 2; j < i / 2; j++) {
if (i % j == 0) {
continue outer;
}
}
System.out.print(i + "\t");
}
}
}
- 打印高度5行的三角形
public class TriangleTestDemo {
public static void main(String[] args) {
//打印高度5行三角形
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >=i ; j--) {
System.out.print(" ");
}
for (int k = 0; k < i; k++) {
System.out.print("*");
}
for (int l = 1; l < i; l++) {
System.out.print("*");
}
System.out.println();
}
}
}
命令行传参
- 有时候希望运行一个程序的时候再传递给他信息
public class CommandLine {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]:" + args[i]);
}
}
}
- 通过命令行编译该java文件生成class文件
- 进入src目录执行(不进入会报错)
- 通过java执行class文件,后面携带参数
可变参数
- JDK1.5开始,Java支持传递同类型的可变参数给一个方法。
- 在方法的声明中,在指定参数类型后加一个省略号(...)。
- 一个方法中只能指定一个可变参数,它必须是方法最后一个参数。任何普通的参数必须在它之前声明。
public class MaxValue {
public static void main(String[] args) {
MaxValue maxValue = new MaxValue();
maxValue.printMax(1,2,3,4,5,6,7,9,100,1,1000);
}
public static void printMax(int ... x) {
if (x.length == 0) {
System.out.println("传入参数个数为0!!!");
return;
}
int max = x[0];
for (int i = 0; i < x.length; i++) {
if (x[i] > max) {
max = x[i];
}
}
System.out.println("max is : " + max);
}
}
输出:max is :1000
值传递和引用传递
- 引用传递本质上还是值传递
例子:
public class ValueTransmit {
public static void main(String[] args) {
int a = 1;
System.out.print(a+"\t");
ValueTransmit.change(a);
System.out.print(a+"\t");
Person person = new Person();
System.out.print(person.name+"\t");
ValueTransmit.changePersonName(person);
System.out.print(person.name+"\t");
}
public static void change(int a) {
a = 10;
}
public static void changePersonName(Person person){
person.name = "niyun";
}
}
class Person{
String name;//null
}
输出:1 1 null niyun
构造器
-
IDEA看Java的class文件在out目录下:到File--Project Structure--Add Content Root--out--ok
-
无参构造方法会自动生成
-
构造方法与类名相同,并且没有返回值
-
一旦定义了有参构造,必须有无参构造
-
alt + insert 快捷生成构造方法
封装
- 属性私有,get/set
继承
-
super注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用gz方法
-
super Vs this:
代表的对象不同:
this : 本身调用者这个对象
super :代表父类对象的应用
前提:
this : 没有继承也可以使用
super : 只能在继承条件才可以使用
构造方法:
this();本类的构造!
super();父类的构造!
-
重写:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小: public>protected>default>private
- 抛出的异常:范围可以被缩小,但不能扩大; ClassNotFoundException --> Exception(大)
多态
- 多态注意事项:
- 多态是方法的多态,属性没有多态
- 父类和子类要有联系,否则类型转换异常!ClassCastException!
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象!Father f1 = new Son();
- 不能重写的方法:
- static修饰的方法属于类,不属于实例
- final修饰的方法
- private修饰的方法
- instanceof:(x instanceof y,x和y必须有关系,不然直接编译报错)
- 父类引用指向子类对象:Fu zi=new zi();如果子类重写了父类的方法,那么zi会调用子类的方法,如果父类有方法,子类没有会调用父类的方法,如果父类没有方法子类有方法,要将zi强制转换成子类对象再调用子类方法。
static详解
- 匿名代码块,静态代码块,构造方法
public class Person {
//匿名代码块
{
System.out.println("匿名代码块");
}
//静态代码块,只执行一次
static {
System.out.println("静态代码块");
}
//构造方法
public Person() {
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person = new Person();
System.out.println("===========");
Person person02 = new Person();
}
}
输出:
静态代码块
匿名代码块
构造方法
===========
匿名代码块
构造方法
- 静态导入包
import static java.lang.Math.random;
import static java.lang.Math.PI;
public class Application {
public static void main(String[] args) {
System.out.println(random());
System.out.println(PI);
}
}
加入static导包可以直接使用random()方法,否则需要Math.random()
接口
- public abstract
- public static final
- 接口不能被实例化,接口中没有构造方法,抽象类可以有
浙公网安备 33010602011771号