【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程序由 ...
随机推荐
- c语言链表升级
之前的链表就是一个普通的带头的单向链表,我们不自觉的会发现这样的链表有缺陷,有关链表的删除新增查找跟链表的结构体内容耦合性太强 什么意思呢? 比如我们之前的链表的结构体 typedef struct ...
- NYOJ 66 分数拆分
分数拆分 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 现在输入一个正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y. 输入 第一行输入一个 ...
- 【head first python】1.初识python 人人都爱列表
#coding:utf-8 #创建简单的python列表 movies = ["The Holy Grail", "The Life of Brain", &q ...
- Python打包EXE神器 pyinstaller
最近由于项目需要,以前的python文件需要编辑为EXE供前端客户使用. 由于最早接触的是distutils,所以一开始准备使用distutils和py2exe搭配来进行python的exe化,也就是 ...
- 【MySQL源码】源码安装和启动mysql
--[MySQL源码]源码安装和启动mysql --------------------------------------2014/08/19 本机环境:ubuntu12.04,fedora-17 ...
- Postman 官网教程,重点内容,翻译笔记,
json格式的提交数据需要添加:Content-Type :application/x-www-form-urlencoded,否则会导致请求失败 1. 创建 + 测试: 创建和发送任何的HTTP请求 ...
- 10分钟学会在windows/Linux下设置ASP.Net Core开发环境并部署应用
创建和开发ASP.NET Core应用可以有二种方式:最简单的方式是通过Visual Studio 2017 来创建,其优点是简单方便,但需要安装最新版本Visual Studio 2017 prev ...
- Entity Framework - 基于外键关联的单向一对一关系
代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关 ...
- jenkins 时区设置
背景 直接搭建好jenkins没有留意时间这块,执行job的时候发现,执行时间和服务器时间不对,需要设置时区 步骤 找到jenkins的启动配置,centos在: /etc/sysconfig/jen ...
- A* a=new B ,会不会产生内存泄露了,露了B-A的部分?
A* a=new B ,delete a;会不会产生内存泄露了,露了B-A的部分.其中B为A的子类 析构函数在下边3种情况时被调用:1.对象生命周期结束,被销毁时:2.delete指向对象的指针时,或 ...