Java基础笔记

  • 在dos环境下编译Java文件

在这里插入图片描述

  • 在dos环境下执行Java类
    在类目录下执行java 类名
    如果出现不存在xxx.class,将含有class文件的目录添加到环境变量的classpath中,或者将classpath删除
  • public类只能在一个Java文件中存在一个

在这里插入图片描述

  • 标识符

可以用来标识类名,接口名,变量名,方法名,常量名。
规则:
只能由数字、字母、下划线、美元符号组成,不能有其他字符(可以使用汉字,但一般不用)
不能以数字开头
不能使用Java中保留的关键字
区分大小写
没有长度限制
命名规范:
类名、接口名 首字母大写,之后每个单词首字母大写
变量名、方法名 首字母小写,之后每个单词首字母大写
常量名全部大写,单词间用_隔开

  • 关键字
关键字含义
abstract表明类或者成员方法具有抽象属性
assert断言,进行程序调试
boolean布尔类型
break提前跳出这个快
byte字节类型
caseswitch语句之中,表示其中一个分支
catch用在异常处理中,用来捕捉异常
char字节类型
class声明一个类
const无具体含义
continue回到一个块的开始处
default默认,例如用在switch语句中,表明一个默认的分支
do用在do-while循环中
double双精度浮点型
else用在条件语句中,表明当条件不成立时的分支
enum枚举
extends表明一个类型是另一个类型的子类,常见的有类和接口
final不可变的量,常量
finally用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float单精度型
for一种循环结构的引导词
goto没有具体含义
if条件语句的引导词
implements声明一个类实现了给定的接口
import声明要访问指定的类或包
instanceof用来测试一个对象是否是指定类型的实例对象
int整数类型
interface接口
long长整数类型
native声明一个方法是由与计算机相关的语言(如C C++等)实现的
new用来创建新的实例对象
package
private私有模式
protected保护模式
public公用模式
return从成员方法中返回数据
short短整数型
static静态属性
strictfp声明FP_strict(单精度或双精度浮点型)表达式遵循IEEE 754算是规范
super表明当前对象的父类型的引用或者父类型的构造方法
switch分支语句结构的引导词
synchronized表明一段代码需要同步执行
this指向当前实例对象的引用
throw抛出一个异常
throws声明在当前定义的成员方法中所有需要抛出的异常
transient声明不用序列化的成员域
try尝试一个可能抛出异常的程序块
void声明当前成员方法没有返回值
volatile表明两个或者多个变量必须同步的发生变化
while用在循环结构中
  • 变量
    变量的定义要在类中,访问时就近原则,方法中的变量不共享给其他方法。
    未初始化的变量不能直接输出。
    在这里插入图片描述
    不能在static方法中引用方法以外的非static变量
    在这里插入图片描述
    可以同时声明多个相同类型的变量
    在这里插入图片描述
    变量的分类
    在这里插入图片描述
    作用域:记住出了大括号就不认识了。
    方法中不能声明static变量
    在这里插入图片描述
    静态方法只能引用静态变量
    在这里插入图片描述
    变量在不同的域,可以同名
    在这里插入图片描述
    声明long型变量时后边加L
    声明flout型变量时后边加F
  • 八个基本数据类型
数据类型长度
byte 字节型1
short 短整型2
int 整型4
long 长整型4
float 单精度4
double 双精度8
boolean 布尔型1
char 字符型2
BigDecimal、String不是基本数据类型
一个数字占一个字符,一个字母占两个字符,一个汉字占四个字符
  • 进制
    进制的表示
符号含义
0b二进制
0八进制
不加十进制
0x十六进制
  • 运算符
运算符包含
算术运算符+、-、*、/、%、++、–
关系运算符>、>=、<、<=、==、!=
逻辑运算符&、丨、!、&&(str != null 时才执行) 、丨丨
赋值运算符=、+=、-=、*=、/=、%=、^=、&=/、丨=、<<=、>>=
位运算符&(按位与)、丨(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(带符号右移)、>>>(无符号右移)
条件(三目)运算符布尔表达式?表达式1:表达式2
字符串连接运算符+
其他运算符instanceof、new
注意小括号的应用
++i:先加一再用
i++:先调用一次之后再加一
两个int型做“/”运算时,小数点后的去掉(模除同理)
int型与其他可以保留小数的类型做“/”运算时,保留小数(模除同理)
  • 循环语句

if else语句

public static void main(String[] args) {
        String a = "下雨";
        if(a == "下雨"){
            System.out.println("今天有雨,请带伞");
        } else if (a=="中雪"){
            System.out.println("天气寒冷,请注意保暖");
        } else {
            System.out.println("今天晴,放心出门吧");
        }
    }

switch case语句

public static void main(String[] args) {
        float score = 70.2F;
        switch ((int) score){//char、byte、short、int、Character、Byte、Short、Integer、String 或枚举
            case 60: case 70: case 80: case 90: case 100:
                System.out.println("及格");
                break;
            case 50:
                System.out.println("不及格");
            default://可以现在任意位置,都是最后执行
                System.out.println("数据出错");
        }
    }

for语句

for (int i = 1;i<=100;i++){
            System.out.println("你好"+i);
        }

可以给本次循环命名 aaa:for(…)为本次循环为aaa循环,通常与break(break:aaa)连用,跳出指定循环。
利用for循环实现99乘法表

public static void main(String[] args) {
        for (int i = 1;i<=9;i++){
            for (int j = 1;j<=i;j++){
                System.out.print(i+"*"+j+"="+i*j+" ");
            }
            System.out.println();
        }
    }

while循环

public static void main(String[] args) {
        int i = 0;
        while (i<10){
            i++;
            System.out.println(i);
        }
    }

do while循环(循环体至少执行一次)

public static void main(String[] args) {
        int i = 0;
        do {
            i++;
            System.out.println(i);
        } while (i<-1);
    }

break和continue:都是用来控制循环的,break用来终止循环的执行,continue用来终止本次循环。

 public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                break;
            }
            System.out.println(i);
        }
        System.out.println("--------");
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                continue;
            }
            System.out.println(i);
        }
    }
  • 方法
//无返回值
public static void sumInt(int a,int b){
//public static是修饰符列表
//void是返回值类型(void表示无返回参数)
//sumInt是方法名
//(int a,int b)是形式参数,是局部变量
        int c = a + b;
        System.out.println(c);
    }

//有返回值
public static int sum1(int a,int b){
        return a+b;//return一旦执行,该方法就执行结束
    }
  • 方法的调用
    调用本类中的方法
public class test {
    public static void main(String[] args) {
        test.sumInt(10,10);//类名.方法名(类名可省略)
        sumInt(1,1);
    }
    public static void sumInt(int a,int b){
        int c = a + b;
        System.out.println(c);
    }
}

调用其他类中的方法

1
public class sum {
    public void sumDouble(double d1,double d2){
    //可以带有static修饰符
        double ds = d1+d2;
        System.out.println(ds);
    }
}2
public class test {
    public static void main(String[] args) {
        sum s = new sum();//先创建对象
        s.sumDouble(1,2);//通过对象调用方法

		//如果只调用一次,可以直接使用 类名.方法名调用
		sum.sumDouble(2,3);
    }
}
  • 堆和栈和方法区
    方法区存类信息、常量、静态变量,栈从方法区中获得方法;堆存放对象实例
  • 方法重载
public class test {
    public static void main(String[] args) {
        sum(1,2);
        System.out.println(sum(1.1,2.1));
    }
    //区别条件是形参类型或数量不同
    public static void sum(int a,int b){
        int c = a + b;
        System.out.println(c);
    }
    public static double sum(double a,double b){
        return a+b;
    }
}
  • 方法递归:调用自身的方法
public class test {
    public static void main(String[] args) {
        int n = 5;
        int result = accumulate(n);
        System.out.println("1加到"+n+"="+result);
    }
    public static int accumulate(int n){
        if (n==1){
            return 1;
        }
        return n+accumulate(n-1);
    }
}


  • [修饰符] class 类名{
    类体 = 属性 + 方法
    }
public class Student {
//    学号
    int no;
//    姓名
    String name;
//    年龄
    int age;
//    性别
    boolean sex;
}
  • 对象的创建及使用
public static void main(String[] args) {
//        创建一个学生对象
        Student s1 = new Student();
//        赋值
        s1.no = 10;
        s1.name = "张三";
        s1.sex = false;
        s1.age = 21;
//        再创建一个学生对象
        Student s2 = new Student();

        System.out.println(s1.no);
        System.out.println(s1.name);
        System.out.println(s1.sex);
        System.out.println(s1.age);
    }
  • 构造方法
    不能写返回值类型,void也不能写
public class Date {
//    创建无参构造方法
    public Date(){
        System.out.println("无参构造方法");
    }
//    创建有参构造方法
    public Date(int year){
        System.out.println("有参构造方法");
    }
}


public class Test {
    public static void main(String[] args) {
//        调用无参构造方法
        Date d1 = new Date();
//        调用有参构造方法
        Date d2 = new Date(2010);
    }
}

一旦创建了有参构造方法,但没重写无参构造方法时,无参构造方法不能直接调用。

  • 面向对象的三大特征
    封装、继承、多态

  • 封装(信息隐藏)
    使用private修饰符

public class Student {
//    学号  使用private修饰
    private int no;
//    姓名
    private String name;
//    年龄
    private int age;
//    创建get和set方法
    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}



public class Test {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("zhangsan");
        s1.setAge(21);
        s1.setNo(123);
        System.out.println(s1.getName());
        System.out.println(s1.getAge());
        System.out.println(s1.getNo());
    }
}

  • this在实例方法中的使用
    哪个对象调用这个方法,方法中的this就代表哪个对象
    this不能在static方法中使用,因为this指向的是当前对象,static方法是类方法,类启动后优先执行,static方法执行时对象还没有创建。
public class Student {
//    姓名
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Student(String _name){
        name = _name;
    }

    public void school(){
        System.out.println("school---"+this);
    }
}




public class Test {
    public static void main(String[] args) {
        Student jack = new Student("jack");
        System.out.println("main---"+jack);
        jack.school();
    }
}


输出(两个地址相同)
main---Student@1b6d3586
school---Student@1b6d3586

this可以省略,有些地方不得省略

public void setName(String name) {
//      this是调用这个方法的对象
//		对象name   =   形参中的name
        this.name = name;
    }
  • this在构造方法中的使用
    在无参构造方法中用this调用有参构造方法,实现数据初始化
public class Date {
    public int getYear() {
        return year;
    }

    public int getMonth() {
        return month;
    }

    public int getDay() {
        return day;
    }

    private int year;
    private int month;
    private int day;

    public Date(){
        this(1999,1,1);//必须在第一行,在其他行无效,目的是避免代码重复
    }
    public Date(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
}


public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date.getYear()+"."+date.getMonth()+"."+date.getDay());
        Date date1 = new Date(2020,3,2);
        System.out.println(date1.getYear()+"."+date1.getMonth()+"."+date1.getDay());
    }
}

  • static静态变量
    静态变量在类加载时初始化,存储在方法区中,并不是当做对象中的元素存放在堆中,值是固定的不能通过对象修改
public class Man {
    String name;
    static boolean sex = true;
    public Man(String name) {
        this.name = name;
    }
    public static void show(){
        System.out.println("--------");
    }
}


public class Test {
    public static void main(String[] args) {
//        静态变量的正式访问方法
        System.out.println(Man.sex);
//        静态方法的正式访问方法
        Man.show();
//      不建议使用如下方法
        Man tom = new Man("tom");
        System.out.println(tom.sex);
        tom.show();
    }
}

  • 静态代码块
    静态代码块优先自上而下执行,且只执行一次
    静态代码块不能引用实例变量,但可以引用静态变量,且静态变量位置在静态代码块之前
public class Test {
    static {
        System.out.println(1);
    }
    public static void main(String[] args) {
        System.out.println(2);
    }
    static {
        System.out.println(3);
    }
}

输出
1
3
2
  • 继承

java中只支持单继承,不支持多继承,c++中支持多继承,但可以通过间接继承来实现多继承 如A继承B,C继承A,从而实现C继承A和B
java默认继承Object类,通常不写
存在耦合度高的问题,即为当A类变化是,连带B类也发生变化
私有方法和构造方法不能被继承
语法:

class 类名 extends 父类名{
	类体;
}
//普通学生类
public class Student {
//    姓名
    private String name;
//    语文成绩
    private double yuwen;
//    数学成绩
    private double shuxue;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getYuwen() {
        return yuwen;
    }

    public void setYuwen(double yuwen) {
        this.yuwen = yuwen;
    }

    public double getShuxue() {
        return shuxue;
    }

    public void setShuxue(double shuxue) {
        this.shuxue = shuxue;
    }
}


//体育生类
public class TiyuStudent extends Student {
//    特有属性
//    跳高成绩
    private double tiaogao;
//    铅球成绩
    private double qianqiu;

    public double getTiaogao() {
        return tiaogao;
    }

    public void setTiaogao(double tiaogao) {
        this.tiaogao = tiaogao;
    }

    public double getQianqiu() {
        return qianqiu;
    }

    public void setQianqiu(double qianqiu) {
        this.qianqiu = qianqiu;
    }
}


//测试体育生类
public class Test {
    public static void main(String[] args) {
        TiyuStudent tiyuStudent = new TiyuStudent();
        tiyuStudent.setName("zs");
        tiyuStudent.setShuxue(99);
        tiyuStudent.setYuwen(95);
        tiyuStudent.setTiaogao(19);
        tiyuStudent.setQianqiu(18);

        System.out.println(tiyuStudent.getName()+"----"+tiyuStudent.getYuwen()+"----"+tiyuStudent.getShuxue()+"----"+
                tiyuStudent.getTiaogao()+"----"+tiyuStudent.getQianqiu());
    }
}


//如果使用有参构造方法
//student类中添加
public Student(String name, double yuwen, double shuxue) {
        this.name = name;
        this.yuwen = yuwen;
        this.shuxue = shuxue;
    }
//tiyustudent类中添加
public TiyuStudent(String name, double yuwen, double shuxue) {
        super(name, yuwen, shuxue);
    }
//在测试类中赋值时
TiyuStudent tiyuStudent = new TiyuStudent("zs",20,20);
        tiyuStudent.setTiaogao(19);
        tiyuStudent.setQianqiu(18);
  • 方法重写
    继承父类之后,子类重写父类中某些方法的方法体
    私有方法和构造方法不能被继承,所以也不能被覆盖,静态方法不存在覆盖
//People类
public class People {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void speakHi(){
        System.out.println(name+"和别人打招呼");
    }
}


//ChinaPeople类,继承People类,并且重写speakHi方法
public class ChinaPeople extends People{
    public void speakHi(){
        System.out.println("你好,我是"+getName());
    }
}


//测试类
public class Test {
    public static void main(String[] args) {
        ChinaPeople p1 = new ChinaPeople();
        p1.setName("zhangsan");
        p1.speakHi();
    }
}

//输出内容为重写后的方法体处理的内容
  • 多态
    多态是同一个行为具有多个不同标现形势或形态的能力,即同一个行为发生在不同对象上会产生不同的效果。
    java中的多态分为向上转型(子类型转换为父类型)和向下转型(父类型转换为子类型)
    向下转型的目的是解决因向上转型而无法调用子类中的方法的问题
//学生类
public class Student {
//    姓名
    private String name;
//    语文成绩
    private double yuwen;
//    数学成绩
    private double shuxue;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getYuwen() {
        return yuwen;
    }

    public void setYuwen(double yuwen) {
        this.yuwen = yuwen;
    }

    public double getShuxue() {
        return shuxue;
    }

    public void setShuxue(double shuxue) {
        this.shuxue = shuxue;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", yuwen=" + yuwen +
                ", shuxue=" + shuxue +
                '}';
    }

    public Student(String name, double yuwen, double shuxue) {
        this.name = name;
        this.yuwen = yuwen;
        this.shuxue = shuxue;
    }
}


//体育生类
public class TiyuStudent extends Student {
//    特有属性
//    跳高成绩
    private double tiaogao;
//    铅球成绩
    private double qianqiu;

    public TiyuStudent(String name, double yuwen, double shuxue, double tiaogao, double qianqiu) {
        super(name, yuwen, shuxue);
        this.tiaogao = tiaogao;
        this.qianqiu = qianqiu;
    }

    public double getTiaogao() {
        return tiaogao;
    }

    public void setTiaogao(double tiaogao) {
        this.tiaogao = tiaogao;
    }

    public double getQianqiu() {
        return qianqiu;
    }

    public void setQianqiu(double qianqiu) {
        this.qianqiu = qianqiu;
    }
	public void spot(){
        System.out.println("we can do anything!!");
    }

    @Override
    public String toString() {
        return "TiyuStudent{"+"name'"+"="+super.getName()+'\'' +
                ", yuwen=" + super.getYuwen() +
                ", shuxue=" + super.getShuxue()+
                ", tiaogao=" + tiaogao +
                ", qianqiu=" + qianqiu +
                '}';
    }

}

//测试类
public class Test {
    public static void main(String[] args) {
        Student s1 = new Student("zhansan",99,98);
//        实现多态,向上转型
        Student s2 = new TiyuStudent("lisi",70,75,19,18);
//        s2.sopt();  无法直接调用体育生中的方法
//        需要向下转型,将学生s2转型为体育生
        TiyuStudent s3 = (TiyuStudent) s2;
        s3.spot();

        System.out.println(s1.toString());
        System.out.println(s2.toString());
        System.out.println(s3.toString());
    }
}


we can do anything!!
Student{name='zhansan', yuwen=99.0, shuxue=98.0}
TiyuStudent{name'=lisi', yuwen=70.0, shuxue=75.0, tiaogao=19.0, qianqiu=18.0}
TiyuStudent{name'=lisi', yuwen=70.0, shuxue=75.0, tiaogao=19.0, qianqiu=18.0}
  • 封装继承多态的综合应用
    主人喂狗时啃骨头,喂猫时吃鱼
//宠物类
public class Pet {//封装成为宠物类
    String name;
    public Pet(String name) {
        this.name = name;
    }
    public void eat(){
    }
}


//猫类
public class Cat extends Pet{//继承pet类
    public Cat(String name) {
        super(name);
    }
    public void eat(){//重写eat方法
        System.out.println(name+"在吃鱼");
    }
}


//狗类
public class Dog extends Pet{
    public Dog(String name) {
        super(name);
    }
    @Override
    public void eat() {
        System.out.println(name+"在啃骨头");
    }
}


//主人类
public class Master {
    public void feed(Pet pet){
        System.out.println("主人开始喂食");
        pet.eat();
        System.out.println("主人喂食完毕");
    }
}


//测试类
public class Test {
    public static void main(String[] args) {
        Pet dog = new Dog("二哈");//多态
        Pet cat = new Cat("点点");
        Master master = new Master();
        master.feed(dog);
        master.feed(cat);
    }
}
  • super
    super表示当前对象从父类继承过来的那部分特征
    super不能在静态方法中使用
    super()调用父类的无参构造
    super.xxx()调用父类的xxx方法
    例子参考前文
  • 参考动力节点JavaSE零基础讲义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值