zoukankan      html  css  js  c++  java
  • JAVA基础语法

    1. 类


    2. 局部变量


     定义: 定义在方法中的变量成为局部变量

    作用域:从定义的位置开始到整个方法结束

    注意:局部变量只能在当前方法中使用,其他地方无法使用

    内存存放位置:存放在栈内

    默认值: 局部变量无默认值;如果木有使用当前变量时,可以不赋值

    2.1成员变量


     定义:定义在方法外、类内的变量叫成员变量(全局变量)

    作用域:在整个类体内

    注意:

    内存存放位置:存放在堆内存中

    默认值:成员变量有默认值;int->0 ;String->null ; boolean->false

    示例:

    public class Student {
    
        public int age = 20; //成员变量
        public String  addr; //成员变量有默认值;存放在堆内存,对整个类生效
    
        public void show(){
            String name = "xiaobai"; //局部变量,必须有默认值;只对当前方法有效;存放在栈中
            System.out.println("我的名字--"+name + ",年龄是--"+ age);
            System.out.println("addr 值是" + addr);
        }
    
        public static void main(String[] args){
            Student stu = new Student();
            stu.show();
    //        System.out.println(age); //main函数使用成员变量需要加static关键字修饰
        }
    }
    View Code

     运行结果:

    默认的无参构造函数
    我的名字--xiaobai,年龄是--20
    addr 值是null

    3.构造方法


     定义:

          创建对象的时候会默认调用构造方法(在堆中开辟空间),可以完成成员变量的某些初始化操作

    构造方法语法:

            方法名称:构造方法的方法名称必须跟类的名称保持一致

            访问修饰符:待定

            形参:可以用户自定义添加,跟方法的普通参数一样

           方法体:完成对象的初始化功能

            返回值:无返回值

    注意:

            1.创建类之后,若没有手动调用构造方法,会默认生成一个无参的构造方法供调用

             2. 当用户自定义了构造方法之后,默认的无参构造方法就不能使用了,需要手动定义无参构造方法

            3. 同一个类中可以包含多个同名的构造方法

            4. 一般构造方法都会进行重载(一个类中可能包含多个属性,只需要给部分属性初始化的时候需要调用不同的构造方法)

     示例:

    public class Teacher {
    
        String name;
        int age;
    
        public Teacher(){
            System.out.println("无参构造方法");
        }
    
        public Teacher(String name){
            System.out.println("自定义构造方法,name值是:"+name);
        }
    
        public Teacher(int age,String name){
            this.age = age;
            this.name = name;
            System.out.println("two 构造方法,name is:" + name + "age is :"+ age);
        }
    
        public static void main(String[] args){
            Teacher t1 = new Teacher();
            t1.name = "lian";
            t1.age = 18;
            System.out.println("无参构造方法..."+ t1.age);
            Teacher t2 = new Teacher("xiaoxiao");
            Teacher t3 = new Teacher(29,"lisi");
            System.out.println("one argument..."+t2.name);
            System.out.println("two argument..." + t3.name + "---" + t3.age);
        }
    }
    View Code

    运行结果:

    无参构造方法
    无参构造方法...18
    自定义构造方法,name值是:xiaoxiao
    two 构造方法,name is:lisiage is :29
    one argument...null
    two argument...lisi---29

    4. 重载


     定义: 

             在一个类中可以包含多个重名的方法,但注意:方法的参数列表不能相同

    三个方面的不同:

              参数个数不同、参数类型不同、参数顺序不同

    5. this


    作用: this代表当前对象本身,指向当前对象

    用处:

         1. 构造方法:当构造方法中的参数名称跟类的成员变量名称一样,可以使用this代表当前对象

         2. 普通方法:当多个普通方法之间进行调用,可以使用this进行调用;指的是当前对象的其他方法

        3. 成员变量的使用:当方法中的参数名称跟成员变量一致时,使用this.变量名称表示的是对象的值;而使用变量名称表示形参列表的值

    示例:

    public class User {
    
        int age;
        String name;
    
        public User(int age){
            this.age = age; //局部变量的age赋值给成员变量;若不指定,则打印默认值 0
            System.out.println("构造方法..." + age);
        }
    
        public static void  main(String[] args){
            User user = new User(18);
            System.out.println("age is :" + user.age); //调用的是成员变量age
        }
    }
    View Code
    public class User {
    
        int age;
        String name;
    
        public User(int age){
            this.age = age; //局部变量的age赋值给成员变量;若不指定,则打印默认值 0
            System.out.println("构造方法..." + age);
        }
    
        //方法1
        public void show(){
            System.out.println("show1");
        }
    
        //方法2
        public void say(){
            System.out.println("say");
            this.show(); //也可以不使用this,调用show方法
        }
    
        public static void  main(String[] args){
            User user = new User(18);
            System.out.println("age is :" + user.age); //调用的是成员变量age
            user.say();
        }
    }
    View Code
    public class User {
    
        int age;
        String name;
    
        public User(int age,String name){
            this.age = age; //局部变量的age赋值给成员变量;若不指定,则打印默认值 0
            this.name = name;
            System.out.println("构造方法..." + age);
        }
    
        //方法1
        public void show(){
            System.out.println("show1");
        }
    
        //方法2
        public void say(String name){
            System.out.println("say");
            this.show(); //也可以不使用this,调用show方法
            System.out.println(name); //局部变量的值
            System.out.println(this.name); //成员变量的值
        }
    
        public static void  main(String[] args){
            User user = new User(18,"zhansan");
            System.out.println("age is :" + user.age); //调用的是成员变量age
            user.say("lisi");
        }
    }
    View Code

    运行结果:

    构造方法...18
    age is :18
    say
    show1
    lisi
    zhansan

    6. static


     定义:

         修饰成员变量时,表示 静态成员变量 或者叫 类变量

         普通变量在使用时,必须通过对象进行调用;

         类变量 或 静态变量可以通过对象调用,也可以通过类名进行调用

    注意:

         静态变量在创建对象之前被初始化;或 在类被载入之前进行初始化

         静态变量被所有的对象共享,属于公共变量,对象和类都可以直接调用,但是推荐使用类来调用

    存储位置: static变量置于方法区。

    示例:

    public class StaticDemo {
            String name = "zhangsan";
            static  int age = 10;
    
            public static void main(String[] args){
                StaticDemo sd = new StaticDemo();
                System.out.println(sd.age); //对象调用
                System.out.println(StaticDemo.age); //类名调用
    
                sd.age = 20;
                System.out.println(sd.age);
                System.out.println(StaticDemo.age);
    
                StaticDemo.age = 30;
                System.out.println(sd.age);
                System.out.println(StaticDemo.age);
    
                StaticDemo sd1 = new StaticDemo();
                System.out.println(sd1.age);
                System.out.println(StaticDemo.age);
            }
    
    }
    View Code

    运行结果: 当修改当前成员变量值时,修改的是同一空间内的值。

    10
    10
    20
    20
    30
    30
    30
    30

    7. 代码块


     定义:使用{}的代码叫做代码块

    分类:

         普通代码块:定义在方法中,使用{}括起来的代码叫普通代码块

         构造代码块:定义在类中使用{}括起来的代码叫构造代码块; 

                  注意:a. 每次代码运行时,会将 构造代码块中的代码 添加到 构造方法 前 ;

                             b. 优先运行构造代码块,再运行构造方法

                             c. 构造代码块中的代码会添加到每一个构造方法中,当使用this()时不会添加 this(age),调用带一个参数的构造方法

         静态代码块: 使用static{}括起来的代码叫静态代码块,在创建对象前优先执行静态代码块

                注意:静态代码块中不能访问非static成员(因为非static成员是通过对象调用的,这时对象还未创建)

         同步代码块:在多线程时会使用,用来给共享空间进行加锁操作

    执行顺序:静态代码>>> 构造代码块(创建对象时使用)>>>普通代码块

    示例:

    public class CodeBlockDemo {
        int age;
        String name;
    
        static {
            System.out.println("静态代码块");
        }
    
        {
            System.out.println("构造代码块...");
        }
    
        public CodeBlockDemo(){
            System.out.println("构造方法...");
        }
    
        public CodeBlockDemo(int age){
            this.age = age;
        }
    
        public CodeBlockDemo(int age, String name){
            this(age);
            this.name = name;
        }
    
        public void test(){
            System.out.println("test...");
            {
                System.out.println("普通代码块....");
            }
        }
    
        public static void main(String[] args){
            CodeBlockDemo cbd = new CodeBlockDemo(18,"aa");
            cbd.test();
            System.out.println("main...");
        }
    }
    View Code

    运行结果:

    静态代码块
    构造代码块...
    test...
    普通代码块....
    main...

    8. 封装


     概念: 将类的某些信息隐藏在类内部,不运行外部程序直接访问;而是通过类提供的方法来实现对隐藏信息的操作和访问

     作用: 使用封装可以保证数据的规范,不符合规范的数据将无法进行操作

    示例:

    package com.xiuxianxiaoyu;
    
    public class Dog {
    
        private int age; //私有属性
        private String name;
        private String color;
    
        //需要通过set/get类设置、获取属性值
        public void setAge(int age){
            if (age >0){
                this.age = age;
            }else {
                System.out.println("年龄输入不合法");
            }
        }
        public int getAge(){
            return this.age;
        }
    
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return this.name;
        }
    
        public void setColor(String color){
            this.color = color;
        }
        public String getColor(){
            return this.color;
        }
    
        public void show(){
            System.out.println("my dog name is :" + name + ", age is :" + age +", color is :" + color);
        }
    
    
    }
    View Code
    package com.xiuxianxiaoyu;
    
    public class DogDemo {
        public static void main(String[] args){
            Dog dog = new Dog();
            dog.setAge(18);
            dog.setName("xiaohei");
            dog.setColor("yellow");
            dog.show();
        }
    }
    View Code

    运行结果:

    my dog name is :xiaohei, age is :18, color is :yellow

    8.1 访问限制


     限制访问,以下分类按照访问权限从大到小排列:

    public: 公共的,当前项目的所有类都可以访问。
    
    protected:受保护的;可以被当前类访问、可以被当前包访问、可以被子类访问。
    
    default:默认权限;可以被当前类访问、可以被当前包访问。
    
    private:只能被当前类访问。

    注意

    4种访问修饰符可以修饰 属性和方法;
    类的访问修饰符只有2种 public 和 default

    8.2 形参、实参


     java中的参数传递都是值传递

        形参: 方法中的参数列表叫形式参数,没有具体的值,只是为了方便在方法体中使用;

       实参: 调用方法是实际传入的参数,代表具体的数值,用来替换在方法体中代码逻辑值的运算

        注意:

                  1. 形式参数的变量名称也是局部变量

                  2. 当方法的参数值是基本数据类型时,不会改变原来的值

                  3. 当方法的参数值是引用类型的时候,如果改变了该引用类型的值,会改变原来对象的值

    示例:

    package com.xiuxianxiaoyu;
    
    public class ArgmentDemo {
    
        public static void test(int a, int b){
            int tmp = a;
            a = b;
            b = tmp;
            System.out.println("test 方法中a=" + a + ",b=" + b );
        }
    
        public static void test2(Point p){
            int x = p.getX();
            int y = p.getY();
            int tmp = x;
            x = y;
            y = tmp;
            p.setX(x);
            p.setY(y);
        }
    
        public static void main(String[] args) {
            int a = 10;  //这个地方的赋值是局部变量的赋值
            int b = 20;
            test(a,b);
            System.out.println("main方法中a=" + a + ",b="+b);
    
            Point p = new Point(2,3);
            test2(p);
            System.out.println("改变后的值:" + p.getX() + "..." + p.getY());
        }
    }
    View Code

    Point类:

    package com.xiuxianxiaoyu;
    
    public class Point {
        private int x;
        private int y;
    
        public Point(int x, int y){
            this.x = x;
            this.y = y;
        }
    
        public int getX() {
            return x;
        }
    
        public void setX(int x) {
            this.x = x;
        }
    
        public int getY() {
            return y;
        }
    
        public void setY(int y) {
            this.y = y;
        }
    }
    View Code

    9. 继承


     定义表示父类跟子类之间的关系;当两个类火灾多个类具备相同的属性和方法时,可以提取出来,变成父类; is a 的关系

    使用:

        1. 使用extends关键字进行继承

        2. 使用继承关系之后,父类中的属性和方法都可以在子类中进行使用(非私有属性和私有方法)

        3. java中为单继承(如果包含多个父类,同时父类中包含重名方法,无法决定调用谁)

     super:
         是直接父类对象的引用

    supper用途:

        1. 可以在子类中 调用父类中被 子类覆盖的方法

        2. 当supper在普通方法中使用的话,可以任意位置编写

        3. 当supper在构造方法中使用时,默认会调用父类的构造方法,一定将supper放在第一行

        4. 在构造方法中supper关键字和this()关键字不能同时出现

        5. 父类中私有的属性和方法都不能被调用,包括构造方法

        6. 子类的构造方法中都会默认使用supper关键字调用父类的构造方法

        7. 如果构造方法中显示的指定了super的构造方法,那么无参的构造方法不会被调用

    总结:

         1. 在创建子类的对象时一定会优先创建父类对象

    示例:

    package com.xiuxianxiaoyu.extend;
    
    public class Pet {
    
        private String name;
        private int age;
        private String gender;
    
        public Pet(){
    
        }
        public Pet(String name, int age, String gender){
            this.name = name;
            this.age = age;
            this.gender = gender;
        }
    
        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 String getGender() {
            return gender;
        }
    
        public void setGender(String gender) {
            this.gender = gender;
        }
    
        public void play(){
            System.out.println("play....");
        }
    }
    View Code

    子类

    package com.xiuxianxiaoyu.extend;
    
    public class Dog extends Pet {
    
        private String sound;
    
        public Dog(){
    
        }
    
        public Dog(String sound){
            this.sound = sound;
        }
    
        public Dog(String name, int age, String gender, String sound){
            super(name,age,gender);
    //        this(sound);  //不能跟supper同时出现
            this.sound = sound;
        }
    
        public String getSound() {
            return sound;
        }
    
        public void setSound(String sound) {
            this.sound = sound;
        }
    
        public void play(){
            super.play(); //先调用父类的play方法
            System.out.println("dog is playing...");
        }
    }
    View Code
    package com.xiuxianxiaoyu.extend;
    
    public class Cat extends Pet{
        private String color;
    
        public Cat(){
    
        }
    
        public Cat(String name, int age, String gender, String color){
           super(name,age,gender);
            this.color = color;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    }
    View Code

    测试类

    package com.xiuxianxiaoyu.extend;
    
    public class PetTest {
    
        public static void main(String[] args) {
            Dog dog = new Dog();
            dog.setName("哈士奇");
            System.out.println(dog.getName());
            dog.play();
        }
    }
    View Code

    运行结果:

    哈士奇
    play....
    dog is playing...

    9.1 重写


     定义:必须存在继承关系,当父类中的方法无法满足子类需求时,可以选择使用重写的方式

    注意:

          1. 重写表示的是子类覆盖父类的方法,当覆盖之后,调用同样的方法时会优先调用子类方法

          2.重写的方法名称、返回值类型、参数列表必须跟父类一致

          3.子类重写的方法不允许比父类的方法具备更小的访问权限

    父类 public             子类 public

     父类 protected       子类 public protected    

    父类 default            子类 public protected     default   

         4. 父类的静态方法,子类可以进行调用;但子类不可重写

    示例:

    父类方法: 

    @Override
    public String  toString(){
         return "my name is " + this.name + ",my age is " + this.age+ ", my gender is " + this.gender;
        }

    子类重写父类方法:

     public String toString(){
            return super.toString()+ ", my sound is " + this.sound;
        }

    9.2  final用法


     final 可以修饰变量: 表示变量的值不可变

    final 可以修饰方法:表示方法不可以被重写

    final可以修饰类:表示类不可以被继承

    10. 抽象类


     定义: java中的对象是对现实世界的具象化,但在现实世界中,某些类并不具备实例化的意义,因此可以定义为抽象类

    使用: 1. 创建抽象类的时候需要添加 abstract 关键字

                2. 不能进行实例化,也就是不能new对象

                3. 抽象类中的某些方法需要子类进行更丰富的实现,父类实现没有意义,此时可以将抽象类的方式定义为抽象方法,没有具体实现,只包含方法名称、返回值、参数列表、访问修饰符

                 4. 使用abstract关键字修饰的方法叫做抽象方法,可以不写方法的实现

                 5. 子类在继承抽象父类时,必须要将父类中的抽象方法进行实现 或者 将子类也定义为抽象类

                 6. 有抽象方法的一定是抽象类;但抽象类中不一定包含抽象方法

    示例:

    抽象类:

    package com.xiuxianxiaoyu.abstracts;
    
    public abstract class Pet {
    
        public String name;
        //抽象方法
        public abstract void print();
        public void play(){
            System.out.println("play....");
        }
    }
    View Code

    子类:

    package com.xiuxianxiaoyu.abstracts;
    
    public class Dog extends Pet {
    
        //子类实现父类的抽象方法
        @Override
        public void print() {
            System.out.println("dog print...");
        }
    }
    View Code

    11. 多态


    定义: 对应同一个指令(调用同一个名称的方法),不同的对象给予不同的反应(不同的方法实现)

    规范:

         1. 必须要有继承关系

         2. 子类方法必须要重写父类的方法

         3. 父类引用指向子类对象

    目的:

       为了提高代码的扩展性和维护性

       方便代码逻辑的编写 

    表现形式:

      1. 父类作为方法的参数

           2. 父类作为方法的返回值类型

    示例:

        父类:

     子类:

    测试类:

    package com.example.duotai;
    
    public class Person {
    
        //父类作为子类的返回值
        public Pet play(int type){
            if (type == 1){
                return new Dog();
            }else if(type == 2){
                return new Cat();
            }else{
                return new Penguin();
            }
        }
    
        //父类作为子类的参数
        public void feed(Pet pet){
            pet.feed();
        }
    
        public static void main(String[] args) {
            Person p = new Person();
            p.feed(new Dog());
            Pet pet = p.play(3);
            if (pet instanceof Dog){
                System.out.println("buy dog!!");
            }else if (pet instanceof Cat){
                System.out.println("bug cat !!");
            }else {
                System.out.println("buy penguin!!");
            }
    
        }
    }
    View Code

    12. 接口


     java中的继承关系是单继续,如果拥有多个父类时,可以考虑使用接口进行实现。

    java中的接口具备广泛的使用:

      1. 使用interface来修饰

      2. 接口中可以包含多个方法,且方法跟抽象类中的抽象方法一致,可以不写实现,子类在实现时必须实现父类接口的逻辑;

      3. 子类实现接口使用implements关键字

     特征

      1. 接口中的所有方法都是抽象方法,不能包含实现逻辑;

      2. 接口中的所有方法的访问修饰权限都是public,默认不限权限,也是public,不是default

           3.接口不能实例化

           4. 接口的子类必须实现接口中的所有方法;跟抽象类不同,抽象类中的抽象方法必须被子类实现

      5. 子类可以实现多个接口 (A implements B,C,D)

      6. 接口中的变量都是静态常量,如果变量没有使用static关键字修饰,它也表示静态常量

      7. 接口中的方法和常量无论是否添加public修饰,默认的权限有且仅有一个,public

           8. 接口代表一种能力,接口中仅有定义N个方法,子类在进行实现时,意味着具备了方法的能力

    13. 总结


    1. try-catch-finally中,finally块唯一不执行的情况是什么?

    答:在try或者catch语句中调用了退出虚拟机的方法(system.exit(1))

    示例:

    public class TryTest{
            public static void main(String[] args){
                test();
            }
         
            public static void test(){
            try{
                System.out.println("try");
                int i = 1 / 0;
                System.exit(1);
            }catch(Exception e){
                e.printStackTrace();
                System.exit(1);
            }finally{
                System.out.println("finally");
            }
        }
    }
    View Code
  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/lhly/p/14223296.html
Copyright © 2011-2022 走看看