Javabean 和 static

这篇文章深入理解类和对象里面的语法结构

目录

Javabean

Static

static修饰成员变量

static修饰方法

static的注意事项


Javabean

JavaBean是一种特殊的Java类,它遵循JavaBeans规范,通过封装数据和相关操作方法提供了一种可重用的组件。JavaBean可以被Applet、Servlet、JSP等Java应用程序调用,也可以被可视化地用于Java开发工具中。说了这么多可以都比较抽象!来一个比较接地气的解释

我们把JavaBean叫做实体类?什么是实体类?

实体类当然是一种类,里面可以有成员,可以有方法。实体类中成员必须private(封装起来),且要提供getter和setter,必须要有无参数构造器

package javabean;

//什么是实体类?有啥特点?
//成员变量必须私有,且要为提供get和set,必须有无参数构造器

public class Student {
    //1.私有成员变量
    private String name;
    private double chinese;
    private double math;

    public Student(){} //无参数构造器

    public Student(String name,double chinese,double math){ //有参数构造器
        if(chinese>=0 && chinese<=100){
            this.chinese = chinese;
        }else{
            System.out.println("您输入的数据非法!");
        }
        this.name = name;
        this.math = math;
    }


    //2.提供公开的getter和setter方法


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getChinese() {
        return this.chinese;
    }

    public void setChinese(double chinese) {
        if(chinese>0 && chinese<100){
            this.chinese = chinese;
        }else{
            System.out.println("您输入的数据非法!");
        }
    }

    public double getMath() {
        return math;
    }

    public void setMath(double math) {
        this.math = math;
    }
}

这个类中全部private 成员 ,并且提供了set和get方法,还构造了无参数构造器。

实体类有啥应用场景吗?

有——数据和业务相分离

比如:

package javabean;

public class StudentService {

    private Student s; //声明了一个学生类成员,因为类的成员类型可以是任何类型
    public StudentService(){}
    public StudentService(Student s){
        this.s = s;//StudentService类对象的 Student类成员
    }

    //打印总成绩
    public void printtotal(){
        System.out.println(s.getName() + "的总成绩为:" + (s.getChinese() + s.getMath()));
    }
    //打印平均成绩
}

看责这个代码可能有点绕,Stuent类已经把数据声明完了,有name,chinese,math。StudentService类看英文就是为Student服务的,所以成员是个Studnt类,所以就要写个有参数构造器把Student类跟StudentService类扯上点关系,所以写个this.s = s,下面就是对Student类服务的方法。

注意:主要Student类对象里面的数据被赋值了,get方法就自动获取了

这个写出Student类和StudentService类就把数据和业务方法分离了。

Static

static修饰成员变量

public class Student {
    //属于类
    static String name;
    //属于对象
    int age;
}

什么叫属于对象和属于类呢?

我们之前创建一个对象是Student s = new Student();

s.age = 10; //这个是属于所有对象的不管创建什么对象都可以.age

而static String name呢?是属于类的,

要用Student.name, 也可以使用对象.name(不推荐容易搞混不容易理解)

举个例子:

package stillness;

/*static关键字
成员变量按照有无static修饰,分为两种.目标:访问机制
1.静态变量:有static修饰,属于类,只加载一份,类名.静态变量
2.实例变量:没有static修饰,每个对象有一份
*/
public class Text {
    public static void main(String[] args) {
        //1.类名.静态变量
        Student.name = "黄龄";

        Student s1 = new Student();
        s1.name = "郁可唯";

        Student s2 = new Student();
        s2.name = "那英";

        System.out.println(Student.name);
    }
}

可以猜下输出是什么,是黄龄吗?

结果是那英。为什么呢?

因为static修饰的是属于类的,只加载一份存放在堆里,虽然用类.name和对象.name都可以访问的,但是会搞混,所以不推荐大家使用对象.name。

静态对象的应用
只对类服务的成员
比如:系统启动后,要求类记住创建了多少个用户对象
package stillness;

public class User {
    static int count = 0;

    String name;
    String gender;

    public User(){
        //注意:在同一个类中访问静态成员变量可以省略类名.
        count++;
    }
}

这样我每new一下对象count都会++。

static修饰方法

static修饰方法
1.静态方法:有static修饰的成员方法,属于类。类名.静态方法
2.实例方法:无static修饰的成员方法,属于对象。对象.方法

如果这个方法只是为了做个功能且不需要直接访问对象的数据,这个方法直接定义为静态方法

比如说Math.random()这个方法就是生成0到1的随机数,Math是类,random()是方法。random()方法只需要生成随机数,并不需要用到Math对象。所以random()这个方法就可以static修饰。

所以static修饰方法就可以用在全部是功能的类上——工具类

工具类的方法都是静态方法,每个类方法都是用来完成一个功能的。
提高了代码的复用性;调用方便,提高了开发效率;工具类把构造器私有化nb点(就不让创建对象),省内存

static的注意事项

1.静态方法中可以直接访问静态成员,不可以直接访问实例成员
2.实例方法中既可以直接访问静态成员,也可以直接访问实例成员
3.实例方法可以出现this关键字,静态方法不可以出现this关键字

解释1:

看到name变红没?变红就说明报错了,本来静态方法是用类名表示都不需要用到对象,这个在静态方法中用到了实例对象,这时候程序就有点懵了,所以静态方法不能直接访问实例变量

解释2:

这个都没有报错,本来静态变量都可以用对象.来访问,只是会影响理解,这种情况虽然可以存在,但是不推荐这样写。

解释3:实例方法可以出现this关键字,静态方法不可以出现this关键字

this是不是指代着这个类的对象啊,静态方法都没有对象访问,怎么可以使用this!

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现留言板功能需要使用到JavaBean和MySQL数据库,以下是一个简单的示例: 1. 首先创建一个名为Message的JavaBean类,用于存储留言信息。 ``` public class Message { private int id; private String name; private String email; private String message; public Message() { } public Message(String name, String email, String message) { this.name = name; this.email = email; this.message = message; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } ``` 2. 创建一个名为MessageDao的Java类,用于实现与MySQL数据库的交互。 ``` import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class MessageDao { private Connection connection; public MessageDao() { connection = ConnectionFactory.getConnection(); } public void addMessage(Message message) { String sql = "INSERT INTO messages (name, email, message) VALUES (?, ?, ?)"; try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.setString(1, message.getName()); statement.setString(2, message.getEmail()); statement.setString(3, message.getMessage()); statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } public List<Message> getAllMessages() { String sql = "SELECT * FROM messages"; List<Message> messages = new ArrayList<>(); try (PreparedStatement statement = connection.prepareStatement(sql)) { ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); String email = resultSet.getString("email"); String message = resultSet.getString("message"); Message msg = new Message(name, email, message); msg.setId(id); messages.add(msg); } } catch (SQLException e) { e.printStackTrace(); } return messages; } } ``` 3. 创建一个名为MessageServlet的Java类,用于处理网页请求和响应。 ``` import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/messages") public class MessageServlet extends HttpServlet { private static final long serialVersionUID = 1L; private MessageDao messageDao; public MessageServlet() { super(); messageDao = new MessageDao(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Message> messages = messageDao.getAllMessages(); request.setAttribute("messages", messages); request.getRequestDispatcher("messages.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String email = request.getParameter("email"); String message = request.getParameter("message"); Message msg = new Message(name, email, message); messageDao.addMessage(msg); response.sendRedirect(request.getContextPath() + "/messages"); } } ``` 4. 创建一个名为messages.jsp的JSP页面,用于显示留言板界面和留言列表。 ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>留言板</title> </head> <body> <h1>留言板</h1> <form method="post" action="messages"> <label for="name">姓名:</label> <input type="text" id="name" name="name" required><br> <label for="email">邮箱:</label> <input type="email" id="email" name="email" required><br> <label for="message">留言:</label> <textarea id="message" name="message" required></textarea><br> <button type="submit">提交</button> </form> <hr> <h2>留言列表</h2> <c:forEach var="msg" items="${messages}"> <div> <h3>${msg.name} <span>${msg.email}</span></h3> <p>${msg.message}</p> </div> </c:forEach> </body> </html> ``` 5. 创建一个名为ConnectionFactory的Java类,用于创建MySQL数据库连接。 ``` import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectionFactory { private static final String URL = "jdbc:mysql://localhost:3306/messages"; private static final String USERNAME = "root"; private static final String PASSWORD = "password"; public static Connection getConnection() { Connection connection = null; try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } return connection; } } ``` 以上是一个简单的利用JavaBean和MySQL实现留言板功能的示例,你可以根据需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值