首页 > 编程语言 >Java学习笔记(三)

Java学习笔记(三)

时间:2024-05-30 14:34:07浏览次数:29  
标签:Java int void 笔记 学习 println 方法 public out

Java学习笔记(三)

对象和类

  • 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • :类是一个模板,它描述一类对象的行为和状态。

下图中汽车类(class),而具体的每辆车为该汽车类的对象(object),对象包含了汽车的颜色、品牌、名称等。

img

Java中的类和对象

拿一条狗举例,作为一个对象,他的状态有:名字、品种颜色,行为有摇尾巴和叫。

对比现实对象,软件对象与其十分相似。

软件对象也有状态和行为,其状态就是属性,而行为通过方法体现。

在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成

类可以看作是创建Java对象的模板,对象是一个个体,而类是对象属性和方法的集合。拿动物世界举例类似于一个动物个体和这个动物个体的物种定义的关系

一个类可以包含以下类型变量:

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

一个类可以拥有多个方法。

构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

下面是一个构造方法示例:

public class Puppy{    
    public Puppy(){
    }     
    
    public Puppy(String name){        
        // 这个构造器仅有一个参数:name    
    } 
}

创建对象

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字 new 来创建一个对象。
  • 初始化:使用 new 创建对象时,会调用构造方法初始化对象。

下面是一个创建对象的例子:

public class Puppy{   
    public Puppy(String name){      
        //这个构造器仅有一个参数:name      
        System.out.println("小狗的名字是 : " + name );    }   
    public static void main(String[] args){      
        // 下面的语句将创建一个Puppy对象      
        Puppy myPuppy = new Puppy( "tommy" );   
    } 
}

编译并运行上面的程序,会打印出下面的结果:

小狗的名字是 : tommy

实例

下面的例子展示如何访问实例变量和调用成员方法:

public class Puppy{
   int puppyAge;
   public Puppy(String name){
      // 这个构造器仅有一个参数:name
      System.out.println("小狗的名字是 : " + name ); 
   }
 
   public void setAge( int age ){
       puppyAge = age;
   }
 
   public int getAge( ){
       System.out.println("小狗的年龄为 : " + puppyAge ); 
       return puppyAge;
   }
 
   public static void main(String[] args){
      /* 创建对象 */
      Puppy myPuppy = new Puppy( "tommy" );
      /* 通过方法来设定age */
      myPuppy.setAge( 2 );
      /* 调用另一个方法获取age */
      myPuppy.getAge( );
      /*你也可以像下面这样访问成员变量 */
      System.out.println("变量值 : " + myPuppy.puppyAge ); 
   }
}

编译并运行上面的程序,产生如下结果:

小狗的名字是 : tommy
小狗的年龄为 : 2
变量值 : 2

方法

以我们经常用到的输出语句System.out.println()为例

  • println() 是一个方法。
  • System 是系统类。
  • out 是标准输出对象。

这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()。

方法的命名规则

  • 1.方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson
  • 2.下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test_,例如 testPop_emptyStack

方法的定义

一般情况下,定义一个方法包含以下语法:

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}

方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

  • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
  • 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
  • 方法体:方法体包含具体的语句,定义该方法的功能。

img

如:

public static int age(int birthday){...}

参数可以有多个:

static float interest(float principal, int year){...}

注意: 在一些其它语言中方法指过程和函数。一个返回非void类型返回值的方法称为函数;一个返回void类型返回值的方法叫做过程。

实例

下面的方法包含 2 个参数 num1 和 num2,它返回这两个参数的最大值。

/** 返回两个整型变量数据的较大值 */
public static int max(int num1, int num2) {
   int result;
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

更简略的写法(三元运算符):

public static int max(int num1, int num2) {
  return num1 > num2 ? num1 : num2;
}

方法调用

Java 支持两种调用方法的方式,根据方法是否返回值来选择。

当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。

当方法返回一个值的时候,方法调用通常被当做一个值。例如:

int larger = max(30, 40);

如果方法返回值是void,方法调用一定是一条语句。例如,方法println返回void。下面的调用是个语句:

System.out.println("欢迎访问菜鸟教程!"); 

实例

下面的例子演示了如何定义一个方法,以及如何调用它:

public class TestMax {
   /** 主方法 */
   public static void main(String[] args) {
      int i = 5;
      int j = 2;
      int k = max(i, j);
      System.out.println( i + " 和 " + j + " 比较,最大值是:" + k);
   }
 
   /** 返回两个整数变量较大的值 */
   public static int max(int num1, int num2) {
      int result;
      if (num1 > num2)
         result = num1;
      else
         result = num2;
 
      return result; 
   }
}

以上实例编译运行结果如下:

5 和 2 比较,最大值是:5

这个程序包含 main 方法和 max 方法。main 方法是被 JVM 调用的,除此之外,main 方法和其它方法没什么区别。

main 方法的头部是不变的,如例子所示,带修饰符 public 和 static,返回 void 类型值,方法名字是 main,此外带个一个 String[] 类型参数。String[] 表明参数是字符串数组。

方法的重载

概述:方法名相同,但参数列表不同的方法(参数个数不同、参数类型不同、参数类型顺序不同)

当我们在实际开发时,难免会遇到使用一个方法时因为参数列表与定义的不同而需要再去定义一个匹配该参数的方法,这个时候就不太方便调用管理了。

举个例子,以一个行为是相加的方法sum()为例

public class OverLoad{
    public static void main(String[] args){
        sum(a:10,b:20); //result = 30
        sum(a:10,b:20,c:30); //result = 60
        sum(a:1.5,b:2.5); //result = 4
	}
    //两个整数相加
	public static void sum(int a,int b){
    	System.out.println(a+b);
	}
    //三个整数相加
	public static void sum(int a,int b,int c){
    	System.out.println(a+b+c);
	}
    //两个浮点数相加
	public static void sum(double a,double b){
    	System.out.println(a+b);
	}
} 

当我们使用重名方法时,这里通过重载使得java能够自动根据传入的参数类型来使用相应的方法,而不需要我们额外命名类似sum1、sum2等不重名方法来增加我们开发时的麻烦。

判断两个方法是否为重载方法,与下面两项无关:

1.和参数名无关;

2.和返回值无关。


源文件声明规则

当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。

  • 一个源文件中只能有一个 public 类
  • 一个源文件可以有多个非 public 类
  • 源文件的名称应该和 public 类的类名保持一致。例如:源文件中 public 类的类名是 Employee,那么源文件应该命名为Employee.java。
  • 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行。
  • 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面。
  • import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

Java 包

包主要用来对类和接口进行分类。当开发 Java 程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。

import 语句

在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。

例如,下面的命令行将会命令编译器载入 java_installation/java/io 路径下的所有类

import java.io.*;

一个简单的例子

在该例子中,我们创建两个类:EmployeeEmployeeTest

首先打开文本编辑器,把下面的代码粘贴进去。注意将文件保存为 Employee.java。

Employee 类有四个成员变量:name、age、designation 和 salary。该类显式声明了一个构造方法,该方法只有一个参数。

import java.io.*;
 
public class Employee{
   String name;
   int age;
   String designation;
   double salary;
   // Employee 类的构造器
   public Employee(String name){
      this.name = name;
   }
   // 设置age的值
   public void empAge(int empAge){
      age =  empAge;
   }
   /* 设置designation的值*/
   public void empDesignation(String empDesig){
      designation = empDesig;
   }
   /* 设置salary的值*/
   public void empSalary(double empSalary){
      salary = empSalary;
   }
   /* 打印信息 */
   public void printEmployee(){
      System.out.println("名字:"+ name );
      System.out.println("年龄:" + age );
      System.out.println("职位:" + designation );
      System.out.println("薪水:" + salary);
   }
}

程序都是从main方法开始执行。为了能运行这个程序,必须包含main方法并且创建一个实例对象。

下面给出EmployeeTest类,该类实例化2个 Employee 类的实例,并调用方法设置变量的值。

将下面的代码保存在 EmployeeTest.java文件中。

import java.io.*;
public class EmployeeTest{
 
   public static void main(String[] args){
      /* 使用构造器创建两个对象 */
      Employee empOne = new Employee("RUNOOB1");
      Employee empTwo = new Employee("RUNOOB2");
 
      // 调用这两个对象的成员方法
      empOne.empAge(26);
      empOne.empDesignation("高级程序员");
      empOne.empSalary(1000);
      empOne.printEmployee();
 
      empTwo.empAge(21);
      empTwo.empDesignation("菜鸟程序员");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}

编译这两个文件并且运行 EmployeeTest 类,可以看到如下结果:

$ javac EmployeeTest.java
$ java EmployeeTest 
名字:RUNOOB1
年龄:26
职位:高级程序员
薪水:1000.0
名字:RUNOOB2
年龄:21
职位:菜鸟程序员
薪水:500.0

标签:Java,int,void,笔记,学习,println,方法,public,out
From: https://www.cnblogs.com/StadarkBlog/p/18222252

相关文章

  • Git使用笔记
    全局Git配置查看用户名和邮箱gitconfiguser.namegitconfiguser.email修改用户名和邮箱gitconfig--globaluser.name"username"gitconfig--globaluser.email"email"生成SSH公钥ssh-keygen-trsa-C"邮箱"重置git本地密码gitconfig--system--......
  • Java 对象关系映射(ORM)框架:介绍Java的经典ORM框架,如Hibernate,MyBatis,及其用法
    什么是ORM对象关系映射(ObjectRelationalMapping,简称ORM)是一种程序设计技术,用于实现面向对象编程语言中的对象和关系数据库中的数据之间的映射。在其他words,它就是创建一个可在编程语言里使用的、能感知数据库模式结构的虚拟对象数据库。 ORM的主要作用如下: ......
  • Java Microservices 和 Spring Cloud:介绍微服务架构,并使用Spring Cloud来说明其在Java
    介绍微服务架构是一种软件开发技术,它将一个大型的单体应用系统拆分为多个小的、独立的服务,每个服务都可以独立部署和运行,各个小服务之间通过网络连接进行通信(通常是用HTTP/REST或消息队列)。每一个微服务都围绕着一个特定的业务功能进行构建,它们独立运行,在自己的进程内进行数......
  • java版微信公众号开发(八)获取jsapi_ticket,生产JS-SDK签名
    jsapi_ticket是公众号用于调用微信JS接口的临时票据。只用正确的签名才能使用JS调用微信接口,小编在这里整理一个一套完整的获取方法。废话不多说,直接上干货。//importjava.security.MessageDigest;/***获取位置信息签名*@AuthorFM_南风*@Date2024......
  • 数据结构之栈(Java,C语言的实现)以及相关习题巩固
    目录栈概念以及代码实现例题232.用栈实现队列1614.括号的最大嵌套深度234.回文链表1614.括号的最大嵌套深度LCR123.图书整理I206.反转链表402.移掉K位数字844.比较含退格的字符串LCR036.逆波兰表达式求值[面试题03.01.三合一](栈概念以及代码实现栈是仅限于在......
  • 数据结构 顺序表(C语言 与 Java实现)以及部分练习题
    目录数据结构数组(顺序表)特点使用Java实现更高级的数组C语言实现总结优点缺点例题26.删除有序数组中的重复项1.两数之和27.移除元素153.寻找旋转排序数组中的最小值485.最大连续1的个数414.第三大的数2656.K个元素的最大和LCP06.拿硬币2057.值相等的最小索引26.删......
  • 基于Java+Vue的园区智能化管理系统:综合管控,推进数字化转型(代码分享)
    前言:智慧园区管理平台是一个集成了多种功能的综合性系统,旨在通过信息化、智能化手段提升园区的管理效率和服务质量。以下是针对系统的各个功能模块的简要描述:一、楼栋管理会务管理:管理园区内的会议预约、会议室使用等。园区信息:展示园区的基本信息,如位置、面积、规划等。楼......
  • Java中Comparable接口和Comparator接口的区别(如果想知道Java中Comparable接口和Compar
        前言:在Java中,Comparable接口和Comparator接口都用于对象之间的比较和排序,但它们在使用和设计上存在一些关键的区别。✨✨✨这里是秋刀鱼不做梦的BLOG✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客        本篇文章主要讲解的是J......
  • 数据结构学习笔记-冒泡排序
    冒泡排序的算法设计与分析问题描述:设计并分析冒泡排序算法【算法设计思想】遍历数组,从第一个元素到倒数第二个元素(因为最后一个元素不需要再比较,它已经是最大的了)。在每次遍历过程中,再次遍历未排序部分的元素(从第一个到当前未排序部分的末尾),比较相邻的两个元素,如果顺序不正确......
  • JavaSE 面向对象程序设计 文件File 介绍练习加千行代码详解
    介绍在Java中,File类是用于表示文件和目录路径的抽象。它提供了一组方法来创建、删除、重命名、检查文件/目录的存在性、以及查询文件/目录的属性等功能。File类可以用于执行文件系统操作,如创建新文件、删除文件、检查文件是否存在等。目的是把字符串先表示为路径然后转化......