• java基础知识总结(1)


    定义类:
    访问修饰符 class 类名{ }
     
    访问修饰符如:public 、priate是可选的
    class是声明类的关键字
    按照命名规范,类名首字母大写
     
    例:创建“人”类,关键代码:
    public class Person{ }
    **********************************************************
    定义属性:
    访问修饰符 数据类型 属性名;
     
    访问修饰符士可选的
    除了访问修饰符之外,其他的语法和声明变量是一致的
     
    例:创建“人”类,名为“人”类添加相应属性,关键代码:
    public class Person{
    public String name;
    public String gender;
    public int age;
    }
     
    **********************************************************
    定义方法:
    访问修饰符 返回类型 方法名称(参数类型 参数名1,参数类型 参数名2,……){ }
     
    访问修饰符是可选的
    返回类型可以是void,在定义方法时,返回类型为void时,表明没有返回值,方法体中不必使用“return”关键字返回具体数据,但是可以使用“return”关键字退出方法
    返回类型不为“void”,那么在方法体中一定要使用“return”关键字返回对应类型的结果,否则程序会有编译错误
    小括号中的“参数类型 参数名1,参数类型 参数名2,……”称为参数列表
    当需要在方法执行的时候为方法传递参数时才需要参数列表,如果不需要传递参数时就可以省略,不过小括号不可以省略,传递多个参数时,以半角的括号进行分隔
     
    例:在“人”类中定义方法,描述人工作的行为,关键代码:
    public class Person{
    public String name;
    public String gender;
    public int age;
    public void work( ){
    System.out.println(this.name+"的工作理念:为梦想而努力奋斗);
    }
    }
     
    **********************************************************
    创建和使用对象:
    1、创建对象
    类名 对象名 = new 类名();
     
    new 是关键字
    左边的类名为对象的数据类型
    右边的类名()称为类的构造方法
     
    例:创建Person类的对象,关键代码:
    Person lilei = new Person( );
     
     
    2、使用对象
    对象名 . 属性             //引用对象的属性
    对象名 . 方法名         //引用对象的方法
     
    例:对象属性赋值并调用方法
    public static void main(String[] args){
    Person lilei = new Person( );
    lilei.name = "李雷";
    lilei.gender = "男";
    lilei.age = 22;
    lilei.work( );
    }
     
    **********************************************************
    成员方法:
    1、带参数的方法
     
    创建work()方法时定义的参数叫做形式参数,简称形参。调用方法时传入的参数叫做实际参数,简称实参。
     
    2、方法重载:
    方法名相同,参数列表不同,就形成了方法重载
     
    特点:在同一个类中,方法名相同,参数的个数或类型不同
    **********************************************************
    成员变量:
    1、成员变量:类中的属性,直接在类中定义的变量,定义在方法的外部。PS:成员变量可以在声明时赋初始值,如果没有赋值,java会给它一个默认值,基本数据类型的值为0,引用类型的值为null
    2、局部变量:定义在方法中的变量,一般情况下,在使用前需要赋值,否则会编译出错
    **********************************************************
    构造方法:
    主要作用是进行一些数据的初始化
    访问修饰符 方法名(参数列表){方法体}
     
    构造方法没有返回值
    默认构造方法没有参数,因此参数列表可选(默认构造无参方法的快捷键:Alt+/)
    构造方法的方法名与类名相同
    如果写了带参的构造方法,必须要生成一个无参的构造方法
     
    例:为Person类定义一个构造方法,关键代码:
    public class Person{
    public Person(){
    this.name = "李雷";
    }
    }
     
    在一个类中可以定义多个重载的构造方法
     
    this关键字是对一个对象的默认引用,每个实例方法内部,都有一个this引用变量,指向调用这个方法的对象
    因为this是在对象内部指代自身的引用,所以this只能调用实例变量、实例方法和构造方法。this不能调用类变量和类方法,this也不能调用局部变量。
    1)使用this调用成员变量,解决成员变量和局部变量的同名冲突。
    2)使用this调用成员方法
    3)使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法第一条语句
    例:
    public Penguin(String name,String sex){
    this.name = name;
    this.sex = sex;
    }
    public Penguin(String name, int health, int love, String sex){
    this(name,sex);
    this.health = health;
    this.love = love;
    }
     
    **********************************************************
    封装的步骤:
    封装:
    用OOP方式完成变量的声明、赋值、使用
    完成2次(声明、赋值、使用):1、封装的类 声明 赋值 使用 2、封装类里面属性的声明 赋值 使用
     
    1、修改属性的可见性
    将Person类中的属性由public修改为private即可。
     
    例:请将Person类的属性私有化,关键代码:
    public class Person{
    private String name;
    private String gender;
    private int age;
    }
     
    2、设置setter/getter()方法
     
    例:请为Person类中的私有属性添加setter/getter()方法,关键代码:
    public class PrivatePerson{
    private String name;
    private String gender;
    private int age;
    public String getName(){
    return name;
    }
    public void setName(String name){
    this.name = name;
    }
    public String getGender(){
    return gender;
    }
    public void setGender(String gender){
    this.gender = gender;
    }
    public int getAge(){
    return age;
    }
    public void setAge(int age){
    this.age = age;
    }
    }
     
    3、设置属性的存取限制
    此时,属性仍然没有限制作用,需要进一步利用条件判断语句进行限制
    例见myeclipse -->practise-->SetPerson
     
    **********************************************************
    定义包:
    package 包名
     
    package是关键字
    报的声明必须是java源文件中的第一条非注释性语句,而且一个源文件只能有一个包声明语句,设计的包需要与文件系统结构相对应。因此,在命名包时,要遵守以下编码规范:
    a、一个唯一的包名前缀通常是全部小写的ASCII字母,并且是一个顶级域名com、edu、gov、net、及org,通常使用组织的网络域名的逆序。例如,如果域名为javagroup.net,可以声明包名为“pacage net.javagroup.mypackage"
    b、包名的后续部分依不同机构各自内部的规范不同而不同。这类命名规范可能以特定目录名的组成来区分部门、项目、机器或注册名,如“package net.javagroup.research.powerproject"
     
    **********************************************************
    包的使用:
    包从大到小写:网址倒过来
    1、声明包的含义是声明当前类所处的位置
    2、导入包的含义是声明在当前类中要使用到的其他类所处的位置
     
    //讲Person类放入pack1包中
    package cn.bdqn.pack1;
    public class Person{
    ……省略代码
    }
    //将PersonTest类放入pack2包中
    //使用Person类时,需要使用import将其导入
    package cn.bdqn.pack2;
    import cn.bdqn.pack1.Person;
    public class PersonTest{
    public static void main(String[] atgs){
    ……省略代码
    }
    }
     
    **********************************************************
    类成员的访问修饰符:
    作用域:   同一个类中   同一个包中   子类   任何地方
    private     可以     不可以    不可以   不可以
    默认修饰符     可以     可以    不可以   不可以
    protected    可以     可以     可以     不可以
    public        可以     可以     可以    可以
    **********************************************************
    static关键字的修饰属性:
    static修饰的属性称为静态变量或者类变量,没有使用static修饰的属性称为实例变量。
     
    例:将Person类的name、gender和age属性保留,新建一个static修饰的属性,并调用 ,关键代码:
    public Person{
    public String name;
    public String gender;
    public static int age;
    public static int PERSON_LIVE;
    //……省略代码
    }
    //以上为Person类代码,以下为调用代码
    //……省略代码
    Person hanbing = new Person();
    hanbing.name = "韩冰";
    hanbing.gender = "女";
    hanbing.age = 22;
    Person.PERSON_LIVE = 1;
     
    实际开发中,static关键字修饰属性的最常用场景就是定义使用final关键字修饰的常量。使用final关键字修饰常量在整个程序运行时都不能被改变,和具体的对象没有关系,因此使用static修饰,
    如“static final  int PERSON_LIVE=1"
     
    PS:  1、常量名一般由大写字母组成
    2、声明常量时一定要赋初值
     
    **********************************************************
    static关键字的修饰方法:
    static修饰的方法称为静态方法或者类方法,不用static关键字修改的方法称为实例方法。
     
    例:将Person中的showDetails()方法使用static关键字修饰,并调用 ,关键代码:
    public Person{
    public String name;
    public String gender;
    public static int age;
    public static void showDetails(String name,String gender,int age){
    System.out.println("姓名是:"+name+",性别为:"+gender+",年龄是:"+age);
    }
    }
    //以上为Person类代码,以下为调用代码
    public class PersonTest{
    public static void main(String[] args){
    Person liudun = new Person();
    Person.showDetails("刘顿","男",23);
    }
    }
     
    1、在静态方法中不能直接访问实例变量和实例方法。
    2、在实例方法中可以直接调用类中定义的静态变量和静态方法
    **********************************************************
    4种基本行为:
    1)访问修饰符:公共的 私有的 受保护的 默认的
    2)返回类型:
    有:变量的定义 数据类型 变量名
    没有:void
    3)方法名:和类名的规范类似
    a、方法名首字母小写
    b、方法名由多个单词组成,从第二个单词开始,首字母大写
    c、方法名要有意义
    4)参数:
    有:变量的声明部分(boolean flag)
    没有:()
    5)方法体:作用域{ }
    a、并列:多个方法可以并列
    b、嵌套:方法不能嵌套;可以嵌套流程控制 {if ( ) { }}
    第一种基本行为:访问修饰符 没有返回类型 方法名(没有){ }
    例:public void add( ){ }
    第二种基本行为:访问修饰符 没有返回类型 方法名(有){ }
    例:public void add (int num1,int num2){ }
    1、变量声明的过程:形参 形式上的参数
    2、变量赋值的过程:实参 实际上的参数
    第三种基本行为:访问修饰符 有返回类型 方法名(没有){ }
    例:public int add( ){ }
    1、关键字:return 后面写的是变量名,返回类型位置写的是变量的数据类型
    2、return后面不能再写代码了
    第四种基本行为:访问修饰符 有返回类型 方法名(有){ }
    把第二种和第三种合在一起
    例:public int add(int num1,int num2){ }
     
    **********************************************************
    继承的语法:
    访问修饰符 class <SubClass> extends <SuperClass>{ }
     
    在java中,继承通过extends关键字实现,其中SubClass称为子类,SuperClass称为父类或基类。
    访问修饰符如果是public,那么该类在整个项目可见。
    不写访问修饰符,则该类只在当前包可见。
     
    在java中,子类可以从父类中继承以下内容:
    可以继承public和protected修饰的属性和方法,不论子类和父类是否在同一个包里
    可以继承默认访问修饰符修饰的属性和方法,但是子类和父类必须在同一个包里
    无法继承父类的构造方法
     
    **********************************************************
    super使用的语法:
    访问父类构造方法:super(参数)
    访问父类属性/方法:super.<父类属性/方法>
     
    super只能出现在子类(子类的方法和构造方法)中,而不是其他位置
    super用于访问父类的成员,如父类的属性、方法、构造方法。
    具有访问权限的限制,如无法通过super访问private
    **********************************************************
    实例化子类对象:
    在java中,一个类的构造方法在如下两种情况中总是会执行:
    1、创建该类的对象(实例化)
    2、创建该类的子类的对象(子类的实例化)
    因此,子类在实例化时,会首先执行其父类的构造方法,然后才执行子类的构造方法。
     
    子类继承父类时构造方法的调用规则如下:
    1、如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,是否写super()语句,效果是一样的。
    2、如果子类的构造方法中通过super显示调用父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类无参构造方法。
    3、如果子类的构造方法中通过this显示调用自身的其他构造方法,在相应构造方法中应用以上两条规则
    如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。
    **********************************************************
    Object类:
    Object类是所有类的父类。在java中,所有java类都直接或间接的继承了java.lang.Object类
     
    关键代码:
    public class Person{
    }
    //两种写法等价
    public class Person extends Object{
    }
     
    **********************************************************
                            Object类的部分方法
    方法 说明
    toString() 返回当前对象本身的有关信息,按字符串对象返回
    equals() 比较两个对象是否是同一个对象,若是,返回true
    clone() 生成当前对象的一个副本,并返回
    hashCode() 返回该对象的哈希代码值
    getClass() 获取当前对象所属的类信息,返回Class对象
    **********************************************************
    方法重写和方法重载的区别:
     
    比较项   位置   方法名   参数表     返回值       访问修饰符
    方法重写  子类   相同     相同    相同或是其子类   不能比父类更严格
    方法重载  同类   相同    不相同      无关         无关
    **********************************************************
    多态:
    例:宠物类Pet,有几个子类,宠物类定义了看病的方法toHospital(),子类分别重写看病方法,关键代码:
    class Pet{
    public void toHospital(){
    system.out.println(“宠物看病!”)
    }
    }
    class Dog extends Pet{
    public void toHostipal(){
    system.out.println(“小鸟看病”)
    }
    }
    public class Test{
    public static void main(String[] args){
    Pet pet;
    pet = new Dog();
    pet.toHospital();
    pet = new Bird();
    pet.toHospital();
    }
    }
     
    示例中,Pet类一般声明为抽象方法,因为其本身实例化没有任何意义,toHopital()方法声明为抽象类。
     
    抽象类不能被实例化
    子类如果不是抽象类,则必须重写抽象类中的全部抽象方法
    abstract修饰符不能和final修饰符一起使用
    abstract修饰的抽象方法没有方法体
    private关键字不能修饰抽象方法
    **********************************************************
    抽象方法:
    抽象方法没有方法体
    抽象方法必须在抽象类里
    抽象方法必须在子类中被实现,除非子类是抽象类
    **********************************************************
    向上转型的语法:
    子类到父类的转换称为向上转型
    <父类型><引用变量名> = new <子类型>();
     
    将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换
    此时通过父类引用变量调用的方法时子类覆盖或继承父类的方法,不是父类的方法
    此时通过父类引用变量无法调用子类特有的方法
     
    **********************************************************
    向下转型的语法:
    <子类型><引用变量名> = (<子类型>)<父类型的引用变量>
    **********************************************************
    instanceof运算符:
    用于判断一个对象是否属于一个类
    在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常
     
    例:判断宠物类型,关键代码:
    public class Test{
    public static void main(String[] args){
    Pet pet = new Bird();
    pet.toHospital();
    if(pet instanceof Dog){
    Dog dog = (Dog) pet;
    dog.catchingFlyDisc();
    }else if(pet instanceof Bird){
    Bird biird = (Bird) pet;
    bird.fly();
    }
    }
    }
     
    使用instanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系,否则会出现编译错误。
    **********************************************************
    多态的应用:
    1、使用父类作为方法的形参
    例:一个主人类,在该类中定义控制动物叫的方法。  关键代码:
    class Host{
    public void letCry(Animal animal){
    animal.cry();
    }
    }
    public class Test{
    public static void main (String[] args){
    Host host = new Host;
    Animal animal;
    animal = new Dog();
    host.letCry(animal);
    animal = new Cat();
    host.letCry(animal);
    animal = new Duck();
    host.letCry(animal);
    }
    }
     
    2、使用父类作为方法的返回值
    使用父类作为方法的返回值,也是Java中实现和使用多态的主要方式
    例:主人送出三种动物,送出的动物可以叫。  关键代码:
    class Host{
    public Animal donateAnimal(String type){
    Animal animal;
    if(type=="dog"){
    animal = new Dog();
    }else if(type=="cat"){
    animal = new Cat();
    }else{
    animal = new Duck();
    }
    return animal;
    }
    }
    public class Test{
    public static void main(String[] args){
    Host host = new Host;
    Animal animal;
    animal = host.donateAnimal("dog");
    animal.cry();
    animal = host.donateAnimal("cat");
    animal.cry();
    }
    }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    B1028人口普查
    B1004成绩排名
    B1041考试座位号
    A1009 Product of Polynomials多项式相乘
    A1002 A+B for Polynomials 多项式相加
    B1010一元多项式求导
    A1065 A+Band C(64 bit)
    A1046 Shortest Distance 最短路径
    排序
    windows 平台使用wireshark命令行抓包
  • 原文地址:https://www.cnblogs.com/niuniunvshen/p/5902100.html
Copyright © 2020-2023  润新知