• 面向对象2


    一、1.this指向

    this最常的用法:

    1. 在程序中产生二义性之处,应使用this来指明当前对象;普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。

        2. 使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
      

    2.static关键字

    在static方法中只能访问实例化后非static的成员。

    非static方法中可以直接访问static成员

    static修饰的成员变量和方法,从属于类。

    普通变量和方法从属于对象的。

    ​ 1.为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。

      2. 对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享!!

      3. 一般用“类名.类属性/方法”来调用。(也可以通过对象引用或类名(不需要实例化)访问静态成员。)

    public class User2 {
      ``int id; // id
      ``String name; // 账户名
      ``String pwd; // 密码
      
      ``static String company = "北京尚学堂"; // 公司名称
      
      
      ``public User2(int id, String name) {
        ``this.id = id;
        ``this.name = name;
      ``}
      
      ``public void login() {
        ``printCompany();
        ``System.out.println(company); 
        ``System.out.println("登录:" + name);
      ``}
      
      ``public static void printCompany() {
    //     login();//调用非静态成员,编译就会报错
        ``System.out.println(company);
      ``}
      
      ``public static void main(String[] args) {
        ``User2 u = new User2(101, "高小七");
        ``User2.printCompany();
        ``User2.company = "北京阿里爷爷";
        ``User2.printCompany();
      ``}
    }
    

    3.静态初始化块(类的初始化)

    public class User3 {
      ``int id;    //id
      ``String name;  //账户名
      ``String pwd;  //密码
      ``static String company; //公司名称
      ``static {
        ``System.out.println("执行类的初始化工作");
        ``company = "北京尚学堂";
        ``printCompany();
      ``} 
      ``public static void printCompany(){
        ``System.out.println(company);
      ``} 
      ``public static void main(String[] args) {
        ``User3 u3 = new User3();
      ``}
    }
    

    4.参数传值机制

    基本数据类型参数的传值

      传递的是值的副本。 副本改变不会影响原件。

    引用类型参数的传值

      传递的是值的副本。但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变”。

    public class User4 {
        int id;        //id
        String name;   //账户名
        String pwd;   //密码
           
        public User4(int id, String name) {
            this.id = id;
            this.name = name;
        }
          
        public   void   testParameterTransfer01(User4  u){
            u.name="高小八";
        }
         
        public   void   testParameterTransfer02(User4  u){
            u  =  new  User4(200,"高三");
        }
          
        public static void main(String[] args) {
            User4   u1  =  new User4(100, "高小七");
             
            u1.testParameterTransfer01(u1); 
            System.out.println(u1.name);
     
            u1.testParameterTransfer02(u1);
            System.out.println(u1.name);
        }
    }
    

    5.package

    通过package实现对类的管理,package的使用有两个要点:

    1. 通常是类的第一句非注释性语句。

    2.包名:域名倒着写即可,再加上模块名,便于内部管理类。

    3..注意事项:

      1. 写项目时都要加包,不要使用默认包。

      2. com.gao和com.gao.car,这两个包没有包含关系,是两个完全独立的包。只是逻辑上看起来后者是前者的一部分。

    命名举例:
    com.sun.test;
    com.oracle.test;
    cn.sxt.gao.test;
    cn.sxt.gao.view;
    cn.sxt.gao.view.model;
    包的使用:
    package cn.sxt;
    public class Test {
        public static void main(String[] args) {
            System.out.println("helloworld");
        }
    }
    

    4.jdk中的主要包

    4-3 JDK中的主要包
    Java****中的常用包 说明
    java.lang 包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
    java.awt 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
    java.net 包含执行与网络相关的操作的类。
    java.io 包含能提供多种输入/输出功能的类。
    java.util 包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。

    6.import(导入类)

    注意要点:

    1. Java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。

    2. 如果导入两个同名的类,只能用包名+类名来显示调用相关类:

    java.util.Date date = new java.util.Date();

    3.导入同名类的处理

    import java.sql.Date;
    import java.util.*;//导入该包下所有的类。会降低编译速度,但不会降低运行速度。
     
    public class Test{
        public static void main(String[] args) {
            //这里指的是java.sql.Date
            Date now; 
            //java.util.Date因为和java.sql.Date类同名,需要完整路径
            java.util.Date  now2 = new java.util.Date();
            System.out.println(now2);      
            //java.util包的非同名类不需要完整路径
            Scanner input = new Scanner(System.in);    
        }
    }
    

    7.静态导入

    静态导入作用是用于导入指定类的静态属性,这样我们可以直接使用静态属性。

    静态导入的使用:

    package cn.sxt;
     //以下两种静态导入的方式二选一即可
    import static java.lang.Math.*;//导入Math类的所有静态属性
    import static java.lang.Math.PI;//导入Math类的PI属性
     
    public class Test2{
        public static void main(String [] args){
            System.out.println(PI);  //System.out.println(Math.PI);
            System.out.println(random());
        }
    }
    
  • 相关阅读:
    java1.8时间比较应用
    Window配置网络设定IPv4的固定IP自动被修改为169.254.*.*的问题
    osgi内嵌jetty容器添加过滤器
    jackson依赖的jar包
    Tomcat下ajax请求路径总结
    JavaScript中一个字符串变量突然变成了false的问题解析
    Ajax请求发送的FormData是"[object object]"
    jQuery的$.extend方法使用
    JS 异常:Uncaught RangeError: Maximum call stack size exceeded解析
    Java的重写equals但不重写hashCode方法的影响
  • 原文地址:https://www.cnblogs.com/zh93/p/12534192.html
Copyright © 2020-2023  润新知