java学习从“菜鸟”到“放弃”
今天学到java的对象和类中,
由于刚考完c++面向对象与程序设计这门课,对于c++中的类掌握自认为不错,就开始过渡到java。
今天面对的问题,在书写一个类的时候,发现了许多与c++不同的地方。
比如:
1.在java中,所有的Java对象都是在堆中构造的,构造器总是伴随着new操作符一起使用。
这玩意,就和c++很不一样。
在主函数main中为例,
public static void main(String[] args){
Employee a= new Employee("zhangzhenyu",1000);
}
2.在java中,函树中有static参数和没有static调用函数方法不同
这玩意,语法上和c++完全不一样。
在主函数main中为例,
1)有static
1 public class test {
2
3 public static void main(String[] args){
4 Employee a= new Employee("zhangzhenyu",1000);
5 triple(a);
6 }
7 public static void triple(Employee x) { //静态方法可以直接调用。
8 x.changeSalary(2000);
9 };
10 }
2)没有static
1 public class test {
2
3 public static void main(String[] args){
4 Employee a= new Employee("zhangzhenyu",1000);
5 test A = new test();
6 A.triple(a);
7 }
8 public void triple(Employee x) { //非静态函数,需要使用对象来调用。
9 x.changeSalary(2000);
10 };
11 }
3.java中对象引用采用的是值传递
以书中Empolyee代码为例
public class test {
public static void main(String[] args){
Employee a= new Employee("zhang",1000);
Employee b= new Employee("chen",2000);
//System.out.println(a.getName());
System.out.println("a = "+ a.getName());
System.out.println("b = " + b.getName());
swap(a,b);
System.out.println("a2 = " + a.getName());
System.out.println("b2 = " + b.getName());
}
public static void swap(Employee x,Employee y) {
Employee temp = x;
x = y;
y =temp;
System.out.println("x in the methods = " + x.getName());
System.out.println("y in the methods = " + y.getName());
};
}
class Employee
{
private static int nextId = 1;
private String name;
private double salary;
private int id;
public Employee(String n,double s)
{
name = n;
salary = s;
id = 0;
}
public String getName() {
return name;
}
public double get() {
return salary;
}
public void changeSalary(double a) {
salary = a;
}
public int getId() {
return id;
}
public void setId() {
id = nextId;
nextId++;
}
}
结果:
a = zhang
b = chen
x in the methods = chen
y in the methods = zhang
a2 = zhang
b2 = chen
如果Java对对象采用的是按引用调用,纳闷这个方法就应该能够实现数据的交换。但是结果不是。
在swap方法结束时,参数变量x和y被丢弃,原来变量a和b仍然引用这个方法调用之前所引用的对象。
方法不能修改传递给它的任何参数变量的内容。
public static void changeSalary(Employee x)
{
x. raiseSalary(200);
} //当调用
a = new Employee(xxxx);
changeSalary(a);
补充一种对象引用
对象引用作为参数有些不同
public class test {
public static void main(String[] args){
Employee a= new Employee("zhang",1000);
//System.out.println(a.getName());
System.out.println("a = "+ a.get());
swap(a);
System.out.println("a2 = " + a.get());
}
public static void swap(Employee x) {
x.changeSalary(5555);
System.out.println("a in = " + x.get());
};
}
class Employee
{
private static int nextId = 1;
private String name;
private double salary;
private int id;
public Employee(String n,double s)
{
name = n;
salary = s;
id = 0;
}
public String getName() {
return name;
}
public double get() {
return salary;
}
public void changeSalary(double a) {
salary = a;
}
public int getId() {
return id;
}
public void setId() {
id = nextId;
nextId++;
}
}
//结果
a = 1000.0
a in = 5555.0
a2 = 5555.0
可以看出来,值发生了改变,这个问题我目前还需要再学习学习,还是有些不懂。
java学习从“菜鸟”到“放弃”的更多相关文章
- Java学习从菜鸟变大鸟之一 hashCode()和equals()的本质区别和联系
在学习java,根据视频做实例的过程中,对equals和hashcode两个方法理解稍微深刻一点,主要是它们两个很容易混淆,容易出错,自己又通过网上的资料学习,和大家分享 equals()方法 equ ...
- Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用
多线程机制是java中的一个特点,掌握它对后面的知识的理解至关重要,是java工程师的必备知识,多线程指在单个程序中可以运行多个不同的线程执行的不同的任务,线程是一个程序内部的顺序控制流.进程是静态的 ...
- Java学习从菜鸟变大鸟之二 输入输出流(IO)
在软件开发中,数据流和数据库操作占据了一个很重要的位置,所以,熟悉操作数据流和数据库,对于每一个开发者来说都是很重要的,今天就来总结一下JavaI/O. 流 流是一个很形象的概念,当程序需要读取数据的 ...
- 从.Net到Java学习第二篇——IDEA and start spring boot
从.Net到Java学习第一篇——开篇 所谓工欲善其事,必先利其器,做java开发也一样,在比较了目前最流行的几个java IDE(eclipse,myeclipse.IDEA)之后,我果断选择IDE ...
- Java 学习(21):Java 实例
Java 实例 本章节我们将为大家介绍 Java 常用的实例,通过实例学习我们可以更快的掌握 Java 的应用. Java 环境设置实例 //HelloWorld.java 文件 public cla ...
- Java学习笔记-多线程-创建线程的方式
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
- Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...
- Java学习路径:不走弯路,这是一条捷径
1.如何学习编程? JAVA是一种平台.也是一种程序设计语言,怎样学好程序设计不只适用于JAVA,对C++等其它程序设计语言也一样管用.有编程高手觉得,JAVA也好C也好没什么分别,拿来就用.为什么他 ...
- Java 学习文章汇总
目前JAVA可以说是产业界和学术界最热门的语言,许多人都很急切想把JAVA学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技 ...
随机推荐
- MongoDB最新4.2.7版本三分片集群修改IP实操演练
背景 重新组网,需要对现有MongoDB分片集群服务器的IP进行更改,因此也需要对MongoDB分片集群的IP也进行相应的更新,而MongoDB分片集群的IP修改不能单纯的通过配置来进行,需要一番折腾 ...
- Python目录与文件操作
一.判断一个路径是否存在 os.path.exists(path) 如果路径存在则返回True,否则返回False. import os import getpass # 获取当前系统用户名 user ...
- 从一个小需求感受Redis的独特魅力
分享一个简单的小需求应该怎么设计实现以及有关Redis的使用 Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的. 需求 ...
- win7中java编程工具安装 java环境变量设置
一.下载java 官方地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html ...
- 区块链入门到实战(32)之Solidity – 代码注释
Solidity 支持c风格和c++风格的注释. //之后到行尾的文本,都被看作注释,编译器忽略此内容 /* 与 */ 之间的文本被看作注释, 编译器忽略此内容 示例 注释示例. function g ...
- Linux下非root用户运行Tomcat
PS:Linux下使用非root用户运行tomcat的原因 由于项目需求,也由于root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限. 这意味着你的任何一个页面脚本(htm ...
- Java/后端学习路线
点赞再看,养成习惯,微信搜一搜[三太子敖丙]关注这个喜欢写情怀的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系 ...
- 万字长文,一篇文章带你入门Python
注释 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家提供 ...
- Queries for Number of Palindromes(区间dp)
You've got a string s = s1s2... s|s| of length |s|, consisting of lowercase English letters. There a ...
- Codeforces1312D Count the Arrays 组合数学
题意 给你\(n\)和\(m\),问满足以下条件的数列的个数: 数列长度为\(n\) 数列值域范围为\(\left[1,m\right]\) 数列有且仅有一对相等的数 数列是单峰数列(先严格递增后严格 ...