【java】关于java类和对象,你想知道的在这里!
java类的基本组成
class Myclass {
field1... // 声明实例变量(实例域)
field2... // 声明实例变量(实例域)
constructor.. // 构造函数
getMethod1.. // 访问器方法1
getMethod2.. // 访问器方法2
setMethod1... // 更改器方法1
setMethod2... // 更改器方法2
}
public class Myclass {
private String name; // 声明实例变量(实例域)
public Myclass () { // 构造函数
name = "尚无名字";
}
public String getName () { // 访问器方法
return name;
}
public void setName (String str) { // 更改器方法
name = str;
}
}
public class Test {
public static void main(String args []) {
Myclass instance = new Myclass();
System.out.println(instance.getName()); // 输 出当前的实例变量name的值
instance.setName("彭湖湾"); // 修改name的值
System.out.println(instance.getName()); // 再次输 出实例变量name的值
}
}
尚无名字
彭湖湾
函数重载
根据参数类型不同进行重载
public class People {
public void print (String str) {
System.out.println("我调用了参数类型为String的方法!");
System.out.println(str);
}
public void print (int number) {
System.out.println("我调用了参数类型为int的方法!");
System.out.println(number);
}
}
public class Test {
public static void main(String args []) {
People people1 = new People();
people1.print("字符串");
}
}
我调用了参数类型为String的方法!
字符串
People people1 = new People();
people1.print();
结果
我调用了参数类型为int的方法!
根据参数个数不同进行重载
public class People {
public void print (String str) {
System.out.println("我调用了一个参数的方法!");
}
public void print (String str1, String str2) {
System.out.println("我调用了两个参数的方法!");
}
}
public class Test {
public static void main(String args []) {
People people1 = new People();
people1.print("参数1", "参数2");
}
}
我调用了两个参数的方法!
public static void main(String args []) {
People people1 = new People();
people1.print("参数");
}
我调用了一个参数的方法!
构造函数重载
实例变量的默认值,和初始化实例变量
boolean false
char '/uoooo'(null)
byte (byte)
short (short)
int
long (L)
float 0.0 (f)
double 0.0 (d)
public class Default {
private int number;
private float f;
private boolean bool;
private char c;
private byte b;
public void printDefaultValues () {
System.out.println("int的默认值:" + number);
System.out.println("float的默认值:" + f);
System.out.println("boolean的默认值:" + bool);
System.out.println("char的默认值:" + c);
System.out.println("byte的默认值:" + b);
}
}
public class Test {
public static void main(String args []) {
Default default1 = new Default();
default1.printDefaultValues();
}
}
int的默认值:
float的默认值:0.0
boolean的默认值:false
char的默认值:
public class Default {
private int number = ;
}
访问私有实例变量
实例访问
public class People {
private String name;
public People (String aName) {
name = aName;
}
public String getName () {
return name;
}
}
public class Test {
public static void main(String args []) {
People people1 = new People("彭湖湾");
System.out.println(people1.name); // 直接通过People的实例对象访问name私有变量
}
}
public class Test {
public static void main(String args []) {
People people1 = new People("彭湖湾");
System.out.println(people1.getName());
}
}
彭湖湾
类内访问
public class People {
private String name;
public People (String aName) {
name = aName;
}
public boolean equalName (People other) {
String otherName = other.name; // 访问另一个对象的私有的name变量
return name.equals(otherName);
}
}
public class Test {
public static void main(String args []) {
People people1 = new People("彭湖湾");
People people2 = new People("XXX");
People people3 = new People("彭湖湾");
System.out.println(people1.equalName(people2));
System.out.println(people1.equalName(people3));
}
}
false // 说明people1和people2的name值不相等
true // 说明people1和people3的name值相等
实例变量和局部变量“交锋”
public class People {
private String name;
public People (String aName) {
name = aName; // 隐式访问实例变量
}
}
public class People {
private String name;
public People (String aName) {
this.name = aName; // 显式访问实例变量
}
}
public class People {
private String name ="实例name变量";
public People (String name) {
System.out.println("输出:" + name); //在构造函数中这样做有些怪异,但为了展示请不要介意
}
}
public class Test {
public static void main(String args []) {
People people1 = new People("局部name变量");
}
}
运行后打印
输出:局部name变量
// 无效的写法!
public class People {
private String name
public People (String name) {
name = name; // 两个都取局部变量this,当然无效了
}
}
public class People {
private String name
public People (String aName) {
name = aName;
}
}
public class People {
private String name;
public People (String name) {
this.name = name;
}
public String getName () {
return this.name;
}
}
静态变量和静态方法
public static int peopleTotal = ; // 这里设为public只是为了演示
public class People {
private String name;
public static int peopleTotal = ; // 这里设为public只是为了演示
public People (String name) {
this.name = name;
peopleTotal++; // 每次调用构造函数时候,使得类的peopleTotal静态变量加1
}
}
Test.java:
public class Test {
public static void main(String args []) {
// 创建三个People对象
People people1 = new People("one");
People people2 = new People("tow");
People people3 = new People("three");
System.out.print(People.peopleTotal); // 输出此时的peopleTotal
}
}
通过静态方法访问静态变量
public static int getPeopleTotal
public class People {
private String name;
private static int peopleTotal = ; // 和上面的例子不同,这里的静态变量是私有的
public People (String name) {
this.name = name;
peopleTotal++; // 每次调用构造函数时候,使得类的peopleTotal静态变量加1
}
public static int getPeopleTotal () {
return peopleTotal; // 通过静态方法访问私有静态变量
}
}
public class Test {
public static void main(String args []) {
People people1 = new People("one");
People people2 = new People("tow");
People people3 = new People("three");
System.out.print(People.getPeopleTotal()); // 输出peopleTotal
}
}
对象能够访问静态变量和静态方法吗?
// 虽然能达到相同效果但不要这么做!!
Test.java
public class Test {
public static void main(String args []) {
People people1 = new People("one");
People people2 = new People("tow");
People people3 = new People("three");
System.out.print(people1.getPeopleTotal()); // 用people1对象调用了静态方法
}
}
类内定义的实例方法能访问静态变量吗?
// 虽然能达到相同效果但不要这么做!!
People.java:
public class People {
private String name;
private static int peopleTotal = ;
public People (String name) {
this.name = name;
peopleTotal++; // 每次调用构造函数时候,使得类的peopleTotal静态变量加1
}
public int getPeopleTotal () {
return peopleTotal; // 通过实例方法访问私有静态变量
}
}
public class Test {
public static void main(String args []) {
People people1 = new People("one");
People people2 = new People("tow");
People people3 = new People("three");
System.out.print(people1.getPeopleTotal()); // 用people1对象调用了实例方法!!
}
}
main方法

public class TestMain {
public static void main(String args[]){
System.out.println("打印main方法中的输入参数!");
for(int i=;i<args.length;i++){
System.out.println(args[i]);
}
}
}
D:\Study\basetest\src>javac TestMain.java
D:\Study\basetest\src>java TestMain
打印main方法中的输入参数!
【java】关于java类和对象,你想知道的在这里!的更多相关文章
- Java学习笔记十三:Java中的类和对象
Java中的类和对象 一:什么是对象: 总的来说就是"万物皆对象",客观存在的事物皆为对象.是计算机所关注的具体信息. 对象(object)是一件事.一个物体.一个名词,或可以获得 ...
- Java 反射 分析类和对象
Java 反射 分析类和对象 @author ixenos 摘要:优化程序启动策略.在运行时使用反射分析类的结构和对象 优化程序启动策略 在启动时,包含main方法的类被加载.它会加载所有它需要的类. ...
- 【JAVA零基础入门系列】Day11 Java中的类和对象
今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...
- Java自学-面向对象 类和对象
Java中的类和对象 引入面向对象的基本概念 假设,我们要设计一个LOL这样的游戏,使用面向对象的思想来设计,应该怎么做? 步骤 1 : 设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必 ...
- Java程序设计基础笔记 • 【第7章 Java中的类和对象】
全部章节 >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...
- java面向对象之 类和对象
OOP:Object Oriented Programming(面向对象编程) 面向对象: 1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在 ...
- Java面向对象(一) 类和对象
一.软件开发进化史 摘自<从零开始学架构> 机器语言(1940年) 最早的软件开发使用的是“机器语言”,直接使用二进制码0和1来表示机器可以识别的指令和数据. 汇编语言(20世纪40年代) ...
- java中的类和对象
Java中的类是一个模板,它用于描述一类对象的行为和状态. 对象则是类中的一个实例,对象有状态(属性)和行为(方法).例如一条狗就是一个对象,他的状态就是他的颜色,名字,品种:他的行为就是叫,摇尾巴, ...
- Java反射获取类和对象信息全解析
反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.f ...
- Java 1.0 类与对象
1.Java中main()的作用: a.测试真正的类 b.启动Java应用程序 2. Java程序只会让对象与对象交互 3.创建对象时存储在堆中,自动回收. 4.Java无全局变量 5.Java程序由 ...
随机推荐
- Vue实例对象的数据选项
前面的话 一般地,当模板内容较简单时,使用data选项配合表达式即可.涉及到复杂逻辑时,则需要用到methods.computed.watch等方法.本文将详细介绍Vue实例对象的数据选项 data ...
- python细碎语法点
在系统入门python有的是没有遇到,有的是学过了缺乏使用没有记住,就开篇随笔记录这些基础的语法点,随时更新. with...as... 也就是说with是一个控制流语句,跟if/for/while/ ...
- WPF个人助手更新
大家好,这次更新主要是去除一些无关的功能,界面做了很大的调整,以前都是自己写的 UI ,最近也引入了 WPF-UI ,挺不错的,特此表示感谢,也希望大家会喜欢,别的也就不多说了,本软件以实用性为主,采 ...
- salesforce 得到下拉列表控制依赖值的方法
salesforce中得到下拉列表的控制依赖值没有系统提供的方法.在网上找了一些,自己也编辑了一下. public static List<Integer> B64ToBytes (Str ...
- iOS开发 Android开发 移动Web开发
通常,来自移动端的测试需求涉及2类: iOS/Android 移动端H5 因此,需要把基础的概念清清楚楚地落地 Client端 Server端 平台描述 语言 相同 差别 / web平台 web平台开 ...
- init.ora, pfile, spfile
实例启动时,查找初始化参数文件的顺序为: spfile<sid>.oraspfile.orainit<sid>.ora 如果以上3个文件都不存在,则实例无法启动. init.o ...
- 使用Servlet实现上传文件功能
1.servlet只需加上一个注释和用request.getPart来获取文件的值,这是servlet3.0的API 2.表单需要加上一个属性enctype="multipart/form- ...
- IPV6与IPV4的区别
IPv4协议的地址长度是32位,IPv6协议的地址长度是128位. 1.表示方式 IPv4地址表示为点分十进制格式,32位的地址分成4个8位分组,每个8位以十进制数显式,中间用点号分隔. 而IPv6采 ...
- 轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)
轻量级ORM框架QX_Frame.Bantina系列讲解(开源) 一.框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html 二.框架使用方式介 ...
- nodejs之express4x
学习node好榜样!前阵子看了php,那个模块化编译真的好棒.然而php学习起来不是一般的记不住,毕竟和js还是有不同的.于是转移到了node.看到熟悉的js脚本,心里踏实多了. 话不多讲,php我也 ...