小梁同学 の
Java学习旅途
你好! 这是小梁同学使用 博客 所记录的文章笔记,作为一个初学者的从基础到未来的记录,如果你想和我一起在Java学习路程上坚持下去,欢迎你的关注与指正。
新的将来
万丈高楼平地起,未来只能靠自己
从无到有,从零到一,学习路上没有尽头
每日一文,每日一记,跟着软件向前努力
加油!!!!!详解代码均在以下标题后的链接中
以下所有有关代码,都是个人在上完课后自己重新敲代码之后所做笔记后上传,并非原搬直接上传,谢谢理解
八.类类型
一.引出
1.创建文件
1.样式
public class 文件名{
文件中的代码
}
类:类类型,每个类类型都有自己的名字,类名当前类的名称
public class 类名{
类中的信息===》变量
}
2.根据存储数据的特征信息起名
例如:猫 名字特征,年龄特征,品种特征
猫的特征:年龄 明治 品种,===》通过变量方式进行显示==创建模板
Public class Cat{===类类型是一个统称,每一个类类型都有自己的名字,例如该类属于Cat类型
} 》类 就是一个模板》没有具体的数据==》抽象的
3 基于模板进行输入
Cat c = new Cat();》基于模板进行了数据的输入》对象====》给对象的每个特征上输入对应的值。
给特征赋值,特征定义时的数据类型,根据类型进行赋值
pubic class cat{
String name;
int age;
String type;
}
pulic class test{
public static void main(String[] args){
Cat c = new Cat();
c.name="tomcat";
c.age=1;
c.type="加菲猫";
System.out.println(c.name+" "+c.age+" "+c.type);
}
}
=======================
tomcat 1 加菲猫
pubic class cat{
String name;
int age;
String type;
}
pulic class test{
public static void main(String[] args){
Cat c = new Cat();
c.name="tomcat";
// 数据值进行约束,给age赋值时,对数据进行判断
// 如果数字是大于0的,就给age特征进行赋值
// 如果数字小于等于0,就给age特征赋予0的值
int a = 10;
if(a>0){
c.age=a;
}else{
c.age=0;
}
c.type="加菲猫";
System.out.println(c.name+" "+c.age+" "+c.type);
}
}
============================
tomcat 10 加菲猫
//一个类,可以创建多个对象,每创建一个对象,写一遍if的的逻辑
//if判断逻辑来说,定义方法,有参的方法,数据都需要不同====》有参方法
//给特征赋值,方法传入的参数给特征赋值====》无返回值的方法
//给特征赋值,给特征设置值, set 设置,age
//set和age进行组合,setAge
//特征在哪定义的,setAge的方法写在哪个类中
pubic class cat{
String name;
String type;
int age;
public void setage(int age1){
if(age1>0){
age=age1;
}else{
age=0;
}
}
}
pulic class test{
public static void main(String[] args){
Cat c = new Cat();
c.name="tomcat";
c.setage(10);
c.type="加菲猫";
System.out.println(c.name+" "+c.age+" "+c.type);
}
}
===============================
tomcat 10 加菲猫
2.访问权限修饰符
注意:java中定义类
特征:赋值的问题:特征都用private修饰====私有属性
给特征赋值和取值:public修饰的get set方法进行操作
方法:用public修饰=====公开的方法
遵循原则:属性私有化,方法公开化
//访问权限 修饰符
//private (java关键词)
//private 修饰的变量只能在自己类中进行使用===》进行了约束
public class Cat {
// 特征比较多,赋值,比较乱,每个对象赋值的方式不同
// 统一一个格式,都通过get set方法==============》进行赋值和取值
private String name;
private String type;
// 私有的,私有修饰的内容只能在当前类中进行使用,出了类不能使用
private int age;
// 方法定义 通用性原则
// 哪个对象调用方法,就是给哪个对象的特征赋值
// 方法调用,才能执行
public void setAge(int age1){
if (age1>0){
age=age1;
}else{
age=0;
}
}
public int getAge(){
return age;
}
public void setName(String name1){
name=name1;
}
public String getName(){
return name;
}
public void setType(String type1){
type=type1;
}
public String getType(){
return type;
}
public void setName(String name1){
name=name1;
}
public String getName(){
return name;
}
public void setType(String type1){
type=type1;
}
public String getType(){
return type;
}
/*public void printCat(){
// 哪个对象调用方法,打印哪个对象的信息
// 对象打印,方法需要手动的调用
System.out.println("cat name:"+name+"cat age:"+age+"cat type"+type);
}*/
// 默认被调用 以后进行对象信息输出时,定义toString方法,对象默认的调用
/*
* 如果一个类中,没有书写toString的方法,创建的当前类的对象打印的是对象的地址
* 如果一个类中,写了toStirng方法,创建的当前类的对象打印的是toString方法中字符串信息
* */
public String toString(){
return "cat name:"+name+",cat age:"+age+",cat type: "+type;
}
}
pulic class test{
public static void main(String[] args){
Cat c = new Cat();
c.setname("tomcat");
c.setage(10);
c.settype("加菲猫");
System.out.println(c);
}
}
============================
cat name:tomcat,cat age:10,cat type: 加菲猫
3.this 当前对象
谁现在调用了方法,谁就是当前对象:局部变量和全局变量重名,this关键词进行区分
public void setAge(int age){
if (age1>0){
this.age=age;
}else{
this.age=0;
}
}
二.构造方法
1.构造方法与冒泡排序结合
public class student{
private String name;
private int no;
private int score;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getNo(){
return no;
}
public void setNo(int no){
this.no=no;
}
public int getScore(){
return score;
}
public void setScore(int score){
if(score > 0){
this.score=score;
}
}
@Override
public String toString() {
return "Student{" +
"name=" + name +
", no=" + no +
", score=" + score +
'}';
}
}
public class test{
public static void main(String[] args){
Student s = new Student();
s.setName("张三");
s.setNo(1001);
s.setScore(100);
Student s1 = new Student();
s1.setName("李四");
s1.setNo(1002);
s1.setScore(60);
Student s2 = new Student();
s2.setName("王五");
s2.setNo(1003);
s2.setScore(70);
Student s3 = new Student();
s3.setName("赵六");
s3.setNo(1004);
s3.setScore(90);
Student s4 = new Student();
s4.setName("魏七");
s4.setNo(1005);
s4.setScore(80);
Student[] stus = {s,s1,s2,s3,s4};
for(int i=0;i<stus.length-1;i++){
for(int j=0;j<stus.length-1-i;j++){
if(stus[j].getScore()>stus[j+1].getScore()){
Student tmp=stus[j];
stus[j]=stus[j+1];
stus[j+1]=tmp;
}
}
}
//输出结果,for循环
//for(int i=0;i<stus.length;i++){
// System.out.println(stus[i]);
//}
//foreach循环 增强for 输出结果 不涉及下标操作
for(Student a:stus){
System.out.println(a);
}
}
}
===================================================
Student{name=李四, no=1002, score=60}
Student{name=王五, no=1003, score=70}
Student{name=魏七, no=1005, score=80}
Student{name=赵六, no=1004, score=90}
Student{name=张三, no=1001, score=100}
2.构造方法
Java创建对象时,固定的格式:new 调用构造方法,完成对象创建===》构造方法
例:Student s = new Student();
构造方法,格式:
访问权限修饰符 类名(){(固定格式:没有返回值类型)
构造方法的方法体
}
如果手动书写了构造方法(手动书写的是有参的还是无参),默认的失效
基础创建对象并赋值:
1 创建对象
2 给特征赋值
构造方法,构造对象,小括号可以传值
定义方法,给方法定义参数,调用给参数赋值
==》可以创建对象的同时,给特征赋值
例:
public Student(String name,String no,int score){
this.no = no;
if (score>0){
this.score = score;
}
this.name = name;
}
public Student(int score,String name,String no){
}
public Student(){
}
3.方法重载
一个类中,出现了方法名相同,参数列表不同的现象,返回值无关===========》方法重载
参数列表的不同体现在哪:(跟变量名没有关系)
1 体现参数的个数
2 体现参数的类型不同
3 体现参数的类型的顺序
通过构造方法引出了方法重载,但是,不是只有构造方法可以重载,只要满足条件都是方法重载,和返回值无关
public Student(String name){
this.name=name;
}
public Student(int score){
if (score>0){
this.score = score;
}
方法调用时,传入的参数的个数,类型,顺序进行方法的区分,进行方法的调用,根据传入的参数自动的选择方法进行执行
4.this()进行构造方法的调用
this关键词和this()区别:
this 当前对象,可以使用this进行全局变量和局部变量的区分,this可以放在方法的任意位置
this()用来调用构造方法的,必须放在构造方法第一句
// 减少冗余==========》if score判断 一次书写,多次使用=======》方法 定义,方法调用
// 构造方法进行score逻辑判断时,写在当前的构造方法中============》定义方法
public Student(int score){
if (score>0){
this.score = score;
}
}
public Student(String name,String no,int score){
// 要使用一个score参数的构造方法============》方法调用 执行方法的逻辑
// this() 用来调用构造方法
this(score);
this.no = no;
this.name = name;
}
public Student(int score,String name,String no){
this(score);
this.no = no;
this.name = name;
}
public Student(){
}
public Student(String name){
this.name=name;
}
//构造方法的调用
public class Num{
private int a;
private int b;
public Num(int a){
this(a,10);
}
public Num(int a,int b){
this.a=a;
this.b=b
}
@Override
public String toString() {
return "Num{" +
"a=" + a +
", b=" + b +
'}';
}
}
public class test{
public static void main(String[] args){
Num n = new Num(10);
System.out.println(n);
Num n1 = new Num(10,20);
System.out.println(n1);
}
}
=================================
Num{a=10, b=10}
Num{a=10, b=20}
三.引出封装和继承
Java中封装
定义一个类,类中进行逻辑实现,属性的书写,属性的赋值,方法的功能逻辑
===》跟类相关的内容,被class文件包裹,通过类进行了封装
继承的引出:
类和类之间的现象:
类的相同的特征和行为,进行了封装,封装到了类中
==========可以进行类的使用,创建对象,给对象赋值,调用方法
//继承引出
public class Cat {
private String name;
private int age;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public class Dog {
private String name;
private int age;
private String color;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
public class Rabbit {
private String name;
private int age;
private int weight;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
封装了三个类,三个类都有name的属性和age的属性,name和age的属性不同的类中
重复多次出现了,属性重复,给属性赋值和取值的getset
===》属性和方法只能放在类中一次定义
类和类之间重复的代码抽离,抽离到另一个类中,进行代码的一次书写
//类和类之间共同的代码,提取到另一个类中,完成一次定义
public class Animal {
private String name;
private int age;public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Cat {
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public class Dog {
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
public class Rabbit {
private int weight;
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
java入门基础—1.3----上一章节: 跳转 java入门基础—1.5----下一章节: 跳转